değil gerçek sorguda açısından açıklamada böylece
WITH cte1 AS (SELECT...)
, cte2 AS (SELECT...)
SELECT *
FROM
cte1 c1
INNER JOIN cte2 c2
ON ........
İLE bu sözdizimi PostgreSQL, Oracle ve sql içinde çalışması gerekir -server, daha sonra genellikle bir noktalı virgülle (;WTIH
) WITH
ilerleyecektir, ancak genellikle sql-sunucu millet (kendimi dahil) tanımlanmış bir CTE önce bitmesi gereken önceki ifadeleri sona ermez çünkü bu ..
Ancak, yo ile ilgili ikinci bir sözdizimi sorununuz olduğunu unutmayın. WHERE
bildirimi. WHERE date IN table_2
geçerli değil çünkü tablo_2'den bir değere/sütuna hiçbir zaman gerçekten başvurmuyorsunuz. Ben IN
ya işte Exists
üzerinde INNER JOIN
tercih ile çalışmalıdır bir sözdizimi bir 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
;
genellikle IN daha iyi olurdu MEVCUT mıydın şekilde tutmak için ama size İÇİNDE kullanmak istiyorsanız Bulunduğunuz yerde gerçek bir SELECT ifadesine ihtiyacınız var. Bir JOIN
sonra EXISTS
öneririm kullanmak istemiyorsanız eğer öyleyse date
potansiyel NULL
olabilecekken
SELECT *
FROM
table_1 t1
WHERE t1.date IN (SELECT date FROM table_2);
İÇİNDE çok problemlidir. Aşağıdaki gibidir:
SELECT *
FROM
table_1 t1
WHERE EXISTS (SELECT * FROM table_2 t2 WHERE t2.date = t1.date);
İkinci 'with' ifadesinden önce virgülle çalışın. Postgres hakkında emin değilim ama bu Oracle ve sql server – mo2
ile normal sözdizimi bir virgül ve daha sonra bir noktalı virgül kullanmayı denedim ve hala sözdizimi hataları vardı: 'HATA:" WITH "veya virgül ve" HATA "için sözdizimi hatası noktalı virgül için "veya" yakınında veya sözdizimi hatası. – Greg