PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

कैसे एक PostgreSQL क्वेरी में बयान के साथ एकाधिक उपयोग करने के लिए?

अन्य टिप्पणियों के अनुसार दूसरी सामान्य तालिका अभिव्यक्ति [सीटीई] एक अल्पविराम से पहले है, न कि बयान के साथ

WITH cte1 AS (SELECT...)
, cte2 AS (SELECT...)
SELECT *
FROM
    cte1 c1
    INNER JOIN cte2 c2
    ON ........

आपकी वास्तविक क्वेरी के संदर्भ में इस सिंटैक्स को PostgreSql, Oracle, और sql-server में काम करना चाहिए, बाद में आमतौर पर आप WITH आगे बढ़ेंगे अर्धविराम के साथ (;WTIH ), लेकिन ऐसा इसलिए है क्योंकि आम तौर पर एसक्यूएल-सर्वर लोग (स्वयं शामिल) पिछले बयानों को समाप्त नहीं करते हैं जिन्हें सीटीई परिभाषित होने से पहले समाप्त करने की आवश्यकता होती है ...

हालांकि ध्यान दें कि आपके WHERE . के संबंध में आपके पास दूसरी सिंटैक्स समस्या थी बयान। WHERE date IN table_2 मान्य नहीं है क्योंकि आप वास्तव में कभी भी तालिका_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 स्टेटमेंट की आवश्यकता होगी।

SELECT * 
FROM
     table_1 t1
WHERE t1.date IN (SELECT date FROM table_2);

जब date . में IN बहुत समस्या होती है संभावित रूप से NULL हो सकता है इसलिए यदि आप JOIN . का उपयोग नहीं करना चाहते हैं तो मैं सुझाव दूंगा EXISTS . इस प्रकार है:

SELECT * 
FROM
     table_1 t1
WHERE EXISTS (SELECT * FROM table_2 t2 WHERE t2.date = t1.date);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. बहु-आयामी सरणी को एकत्रित करने के लिए फ़ंक्शन में प्रारंभिक सरणी

  2. क्यों pg_restore सफलतापूर्वक लौट रहा है लेकिन वास्तव में मेरे डेटाबेस को पुनर्स्थापित नहीं कर रहा है?

  3. ClusterControl के साथ PostgreSQL प्रबंधन और स्वचालन

  4. PostgreSQL में भौतिक प्रतिकृति तंत्र

  5. PostgreSQL में एक ऑटो इंक्रीमेंट प्राथमिक कुंजी को कैसे परिभाषित करें