[SQL] 어떻게 PostgreSQL의 쿼리 문 여러 사용 하는가?
SQL어떻게 PostgreSQL의 쿼리 문 여러 사용 하는가?
나는 효과적으로 With 문을 사용하여 여러 TEMP 테이블이 무엇인지 "선언"을하고 싶습니다. 내가 실행하려고 쿼리의 라인을 따라입니다 :
WITH table_1 AS (
SELECT GENERATE_SERIES('2012-06-29', '2012-07-03', '1 day'::INTERVAL) AS date
)
WITH table_2 AS (
SELECT GENERATE_SERIES('2012-06-30', '2012-07-13', '1 day'::INTERVAL) AS date
)
SELECT * FROM table_1
WHERE date IN table_2
나는 PostgreSQL의 문서를 읽고 제표를 여러 개 사용으로 연구하고 답을 찾을 수 없습니다했습니다.
해결법
-
==============================
1.두 번째 공통 테이블 표현식 [CTE가] 쉼표 그렇게하지 않는 WITH 문 앞에는 다른 의견 당
두 번째 공통 테이블 표현식 [CTE가] 쉼표 그렇게하지 않는 WITH 문 앞에는 다른 의견 당
WITH cte1 AS (SELECT...) , cte2 AS (SELECT...) SELECT * FROM cte1 c1 INNER JOIN cte2 c2 ON ........
실제 쿼리의 관점에서이 구문이 아니라 나중에 일반적으로는 세미콜론 (;)으로 진행합니다, PostgreSQL을, 오라클 및 SQL 서버에서 작동합니다 (; WTIH), 그러나 일반적으로 SQL 서버 사람들이 (자신 포함) 돈 때문이다 필요 't 끝 이전 문은 CTE 이전에 정의 된 종료합니다 ...
당신이 당신의 WHERE 문에 관해서 두 번째 구문 문제가 있다고하지만 있습니다. 실제로 table_2에서 값 / 열을 참조하지 않기 때문에 table_2 날짜가 유효하지 않습니다 WHERE. 나는 INNER IN을 통해 가입 또는 그래서 여기에 존재하는 것은이 가입 작업을해야 구문입니다 선호 :
WITH table_1 AS ( SELECT GENERATE_SERIES('2012-06-29', '2012-07-03', '1 day'::INTERVAL) AS date ) , table_2 AS ( SELECT GENERATE_SERIES('2012-06-30', '2012-07-13', '1 day'::INTERVAL) AS date ) SELECT * FROM table_1 t1 INNER JOIN table_2 t2 ON t1.date = t2.date ;
당신은 일반적으로 어디에서 당신이 실제 SELECT 문을 필요로 사용하여보다하지만, 더 나은 것 EXISTS 당신이 그것을 가지고 방법을 계속합니다.
SELECT * FROM table_1 t1 WHERE t1.date IN (SELECT date FROM table_2);
당신은 그때 내가 제안 EXISTS 가입 사용하지 않을 그래서 만약 날짜가 잠재적으로 NULL이 될 수있을 때 IN은 매우 문제가있다. AS는 다음과 같습니다 :
SELECT * FROM table_1 t1 WHERE EXISTS (SELECT * FROM table_2 t2 WHERE t2.date = t1.date);
-
==============================
2.당신은 문을 사용하여 결과를도를 체인 수 있습니다. 예 :
당신은 문을 사용하여 결과를도를 체인 수 있습니다. 예 :
WITH tab1 as (Your SQL statement), tab2 as ( SELECT ... FROM tab1 WHERE your filter), tab3 as ( SELECT ... FROM tab2 WHERE your filter) SELECT * FROM tab3;
from https://stackoverflow.com/questions/38136854/how-to-use-multiple-with-statements-in-one-postgresql-query by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL 구문을 사용하여 MySQL의 테이블에서 마지막 레코드를 선택하는 방법 (0) | 2020.06.26 |
---|---|
[SQL] 비트 필드에 MIN 집계 함수를 적용 (0) | 2020.06.26 |
[SQL] 어떻게 그룹에 스파크 SQL에서 시간 간격으로 (0) | 2020.06.26 |
[SQL] SQL : 적어도 N 시간에 발생하는 열 값을 가진 행을 선택? (0) | 2020.06.26 |
[SQL] 는 SQL 서버 데이터베이스 테이블이 개 중복 업데이트 한 (0) | 2020.06.26 |