하나의 Postgre에서 여러 WITH 문을 사용하는 방법SQL 쿼리?
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
나는 Postgre를 읽었습니다.SQL 문서화 및 다중 사용에 대한 연구WITH
문을 열어서 답을 찾을 수 없습니다.
다른 의견에 따라 두 번째 공통 테이블 식 [CTE] 앞에는 WITH 문이 아닌 쉼표가 나옵니다.
WITH cte1 AS (SELECT...)
, cte2 AS (SELECT...)
SELECT *
FROM
cte1 c1
INNER JOIN cte2 c2
ON ........
실제 쿼리와 관련하여 이 구문은 PostgreSql, Oracle 및 sql-server에서 작동해야 합니다. 일반적으로 나중에 진행할 것입니다.WITH
세미콜론(;WTIH
하지만 일반적으로 sql-server 사용자(나 자신 포함)는 CTE를 정의하기 전에 종료해야 하는 이전 문을 종료하지 않기 때문입니다.
그러나 다음과 관련하여 두 번째 구문 문제가 있었습니다.WHERE
진술. WHERE date IN table_2
table_2의 값/열을 실제로 참조하지 않으므로 유효하지 않습니다.선호합니다INNER JOIN
위에IN
또는Exists
그래서 여기에 사용할 구문이 있습니다.JOIN
:
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 문이 필요합니다.
SELECT *
FROM
table_1 t1
WHERE t1.date IN (SELECT date FROM table_2);
IN은 다음과 같은 경우에 매우 문제가 됩니다.date
잠재적으로 그럴 수 있습니다.NULL
그래서 만약 당신이 사용하고 싶지 않다면.JOIN
그렇다면 제가 제안하고 싶은 것은EXISTS
다음과 같습니다.
SELECT *
FROM
table_1 t1
WHERE EXISTS (SELECT * FROM table_2 t2 WHERE t2.date = t1.date);
WITH 문을 사용하여 결과를 연결할 수도 있습니다.예:
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;
언급URL : https://stackoverflow.com/questions/38136854/how-to-use-multiple-with-statements-in-one-postgresql-query
'programing' 카테고리의 다른 글
ASP.NET MVC의 SSL 페이지 (0) | 2023.06.16 |
---|---|
Android getResources().getDrawable()이 더 이상 사용되지 않는 API 22 (0) | 2023.06.16 |
vuex에서 이상한 게터.누가 나에게 이 행동을 설명해 줄 수 있습니까? (0) | 2023.06.16 |
SQL에서 동일한 쿼리에 여러 뷰를 만든 다음 이 뷰를 결합하려면 어떻게 해야 합니까? (0) | 2023.06.16 |
공용 VAPID 키를 찾을 수 있는 Firebase 클라우드 메시징 (0) | 2023.06.16 |