아닌 실제 쿼리의 측면에서 문 그래서
WITH cte1 AS (SELECT...)
, cte2 AS (SELECT...)
SELECT *
FROM
cte1 c1
INNER JOIN cte2 c2
ON ........
이 구문은 PostgreSQL을, 오라클 및 SQL에서 작동합니다 -server, 나중에 일반적으로 WITH
을 세미콜론 (;WTIH
)으로 처리하지만, 이는 일반적으로 SQL Server 서버 사용자 (본인 포함)가 CTE를 정의하기 전에 종료해야하는 이전 명령문을 종료하지 않기 때문입니다. .
그러나 두 번째 문법 문제는 요에 관한 것입니다. ur WHERE
성명. WHERE date IN table_2
은 실제로 table_2에서 값/열을 참조하지 않으므로 유효하지 않습니다. 내가 IN
정도 여기 Exists
이상 INNER JOIN
을 선호 함께 작동합니다 구문입니다 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
;
당신이 일반적으로보다 더 나은 것 EXISTS 당신이 그것을 가지고 방식을 유지하지만에서 사용하려면 당신의 실제 SELECT 문이 필요합니다. 당신이이 JOIN
다음 내가 EXISTS
을 제안 사용하지 않으 그렇다면 date
잠재적 NULL
할 수있을 때
SELECT *
FROM
table_1 t1
WHERE t1.date IN (SELECT date FROM table_2);
는 IN은 매우 문제가있다. 다음과 같습니다 :
SELECT *
FROM
table_1 t1
WHERE EXISTS (SELECT * FROM table_2 t2 WHERE t2.date = t1.date);
두 번째'앞에'명령문 앞에 쉼표를 사용하십시오. postgres에 대해서는 확실하지 않지만 오라클과 SQL 서버의 일반적인 구문은 – mo2
입니다. 쉼표를 사용하고 나중에 세미콜론을 사용했지만 구문 오류가 계속 발생했습니다. '오류 : 쉼표의 WITH "또는"근처의 구문 오류 및 쉼표의 오류 : 세미콜론의 경우 "또는"근처에서 구문 오류가 발생합니다. – Greg