अन्य टिप्पणियों के अनुसार दूसरा कॉमन टेबल एक्सप्रेशन [सीटीई] एक अल्पविराम से पहले का है, ऐसा कथन नहीं है
WITH cte1 AS (SELECT...)
, cte2 AS (SELECT...)
SELECT *
FROM
cte1 c1
INNER JOIN cte2 c2
ON ........
आपकी वास्तविक क्वेरी के संदर्भ में इस वाक्यविन्यास को PostgreSql, Oracle, और sql-server में काम करना चाहिए, अच्छी तरह से बाद में आम तौर पर आप WITH
अर्धविराम ( ;WTIH
) के साथ आगे बढ़ेंगे , लेकिन ऐसा इसलिए है क्योंकि आमतौर पर sql-server लोग (खुद शामिल) समाप्त नहीं होते हैं पिछले बयानों को एक सीटीई से पहले समाप्त करने की आवश्यकता है जो परिभाषित किया जा रहा है ...
ध्यान दें कि आपके 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
;
यदि आप अपने पास वह तरीका रखना चाहते हैं जो आम तौर पर EXISTS IN से बेहतर होगा, लेकिन IN का उपयोग करने के लिए आपको अपने वास्तविक चयन विवरण की आवश्यकता होगी।
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
कथन से पहले किसी भी अन्य के बाद अल्पविराम आज़माएं । पोस्टग्रेज के बारे में निश्चित नहीं है, लेकिन यह Oracle और sql सर्वर के साथ सामान्य वाक्यविन्यास है