Según los otros comentarios, la segunda Expresión de tabla común [CTE] está precedida por una coma, no por una declaración CON, por lo que
WITH cte1 AS (SELECT...)
, cte2 AS (SELECT...)
SELECT *
FROM
cte1 c1
INNER JOIN cte2 c2
ON ........
En términos de su consulta real, esta sintaxis debería funcionar en PostgreSql, Oracle y sql-server, bueno, más tarde normalmente procederá WITH
con un punto y coma (;WTIH
), pero eso se debe a que, por lo general, la gente del servidor sql (incluido yo mismo) no finaliza las declaraciones anteriores que deben finalizar antes de que se defina un CTE...
Sin embargo, tenga en cuenta que tuvo un segundo problema de sintaxis con respecto a su WHERE
declaración. WHERE date IN table_2
no es válido porque en realidad nunca hace referencia a un valor/columna de table_2. Prefiero INNER JOIN
sobre IN
o Exists
así que aquí hay una sintaxis que debería funcionar con 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
;
Si desea mantener la forma en que lo tenía, que normalmente EXISTE, sería mejor que IN, pero para usar IN necesita una instrucción SELECT real en su ubicación.
SELECT *
FROM
table_1 t1
WHERE t1.date IN (SELECT date FROM table_2);
IN es muy problemático cuando date
potencialmente podría ser NULL
así que si no quieres usar un JOIN
entonces sugeriría EXISTS
. COMO sigue:
SELECT *
FROM
table_1 t1
WHERE EXISTS (SELECT * FROM table_2 t2 WHERE t2.date = t1.date);