Podle ostatních komentářů před druhým společným tabulkovým výrazem [CTE] je čárka, nikoli výraz WITH, takže
WITH cte1 AS (SELECT...)
, cte2 AS (SELECT...)
SELECT *
FROM
cte1 c1
INNER JOIN cte2 c2
ON ........
Pokud jde o váš skutečný dotaz, tato syntaxe by měla fungovat v PostgreSql, Oracle a sql-server, čím později budete obvykle pokračovat WITH se středníkem (;WTIH ), ale je to proto, že lidé z SQL serveru (včetně mě) neukončují předchozí příkazy, které je třeba ukončit před definováním CTE...
Všimněte si však, že jste měli druhý problém se syntaxí týkající se WHERE prohlášení. WHERE date IN table_2 není platné, protože ve skutečnosti nikdy neodkazujete na hodnotu/sloupec z tabulky_2. Preferuji INNER JOIN přes IN nebo Exists zde je syntaxe, která by měla fungovat s 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
;
Pokud chcete zachovat způsob, jakým jste to měli, což by obvykle EXISTS bylo lepší než IN, ale k použití IN potřebujete skutečný příkaz SELECT ve vašem where.
SELECT *
FROM
table_1 t1
WHERE t1.date IN (SELECT date FROM table_2);
IN je velmi problematické, když date může být potenciálně NULL pokud tedy nechcete použít JOIN pak bych navrhoval EXISTS . následovně:
SELECT *
FROM
table_1 t1
WHERE EXISTS (SELECT * FROM table_2 t2 WHERE t2.date = t1.date);