postgresql - SQL + inner select with different rowset -


मेरे पास तीन आंतरिक चयनों के साथ एक एसक्यूएल चयन होता है:

  t1.a, t2 चुनें .b, t3.c से (ए से ए के रूप में चयन करें ...) टी 1 & lt; - क्वेरी 1 (बीबी के रूप में बी से चुनें ...) के रूप में टी 2 & lt; - क्वेरी 2 (c से c से चुनें) ..) टी 3 के रूप में & lt; - क्वेरी 3 जहां t1.id = t2.id और t2.id = t3.id  

क्वेरी 1 के सेट में 5 पंक्तियाँ हैं क्वेरी 2 के परिणाम में 5 पंक्तियाँ हैं क्वेरी 3 के परिणाम में 2 पंक्तियां हैं।

तो मेरे एसक्यूएल केवल दो पंक्तियों को प्रदर्शित करता है क्योंकि क्वेरी 3 में 2 पंक्तियाँ हैं और मेरे पास एक codition है: t1.id = t2.id और t2.id = t3 .id।

लेकिन अंत में मैं 5 पंक्तियों को देखना चाहूंगा और जहां क्वेरी 1 या / और 2 का कोई भी परिणाम नहीं है, मैं मान प्राप्त करना चाहता हूं या डिफ़ॉल्ट बनाना चाहता हूं।

अगर मैं निकाल देता हूं

क्या आप मुझे बता सकते हैं कि मैं इसे कैसे हल कर सकता हूं?

संपादित करें:

/ Strong>

यह स्थिति है:

  + -------- + | क्लाइंट | + -------- + | + ------------------ + | क्लाइंट_बेन्चमार्क | | | | + Fk_client_id | | + Fk_kpi_id | | + मान | | + अंतिम_अपडेट | + ------------------ + | + ------ + | केपीआई | + ------ + केपीआई में डालें (आईडी, नाम, ALIAS_NAME ...) मान (1, 'kpi 1' ...); केपीआई (आईडी, NAME, ALIAS_NAME ...) मूल्यों में डालें (2, 'kpi 2' ...); केपीआई (आईडी, NAME, ALIAS_NAME ...) मूल्य (3, 'kpi 3' ...) में डालें; केपीआई (आईडी, NAME, ALIAS_NAME ...) मूल्य (4, 'केपीआई 4' ...) में डालें; ... client_benchmark (आईडी, CLIENT_ID, KPI_ID, VALUE ...) मूल्यों में डालें (1, 1, 1, ए 1_1 ...); Client_benchmark (आईडी, CLIENT_ID, KPI_ID, VALUE ...) मूल्यों में सम्मिलित करें (2, 1, 2, बी 1_2 ...); ... client_benchmark (आईडी, CLIENT_ID, KPI_ID, VALUE ...) मूल्यों में डालें (3, 2, 1, ए 2_1 ...); क्लाइंट_बेन्चमार्क (ID, CLIENT_ID, KPI_ID, VALUE ...) मूल्यों में डालें (4, 2, 1, बी 2_2 ...); Client_benchmark (आईडी, CLIENT_ID, KPI_ID, VALUE ...) मूल्यों में डालें (5, 2, 1, c2_3 ...); क्लाइंट_बेन्चमार्क (आईडी, CLIENT_ID, केपीआई_आईडी, VALUE ...) मूल्यों में डालें (6, 2, 1, डी 2_4 ...); Client_benchmark (ID, CLIENT_ID, KPI_ID, VALUE ...) मूल्यों में डालें (7, 2, 1, e2_5 ...); ... client_benchmark (आईडी, CLIENT_ID, KPI_ID, VALUE ...) मूल्यों में डालें (8, 3, 1, ए 3_1 ...); Client_benchmark (आईडी, CLIENT_ID, KPI_ID, VALUE ...) मूल्यों में सम्मिलित करें (9, 3, 2, बी 3_2 ...); ...  

मैं इसे प्रदर्शित करना चाहता हूं:

  client_id | Kpi_1.name | Kpi_1.value | Kpi_2.name | Kpi_2.value | Kpi_3.name | Kpi_3.value ---------- + ------------ + ------------- + --------- --- + ------------- + ------------ + ------------ 1 | 'केपीआई 1' | A1_1 | 'केपीआई 2' | बी 1_2 | & LT; अशक्त & gt; | & LT; अशक्त & gt; 2 | 'केपीआई 1' | A2_1 | 'केपीआई 2' | बी 2_2 | 'केपीआई 3' | C2_3 3 | 'केपीआई 1' | ए 3_1 | 'केपीआई 2' | बी 3_2 | & LT; अशक्त & gt; | & LT; अशक्त & gt;  

मुझे एक तेज और प्रभावी एसक्यूएल की जरूरत है जितनी कम संभव sql join कमांड के साथ और मैं इसके लिए एक दृश्य तालिका बनाना चाहता हूं।

मैं postgreSQL सर्वर का उपयोग करता हूं। < / P>

Thx।

आप चाहते हैं कि:

  T1.a, t2.b, t3.c से तालिका 1 के रूप में चुनें, t1 बाएं जुड़ें टेबल 2 के रूप में टी 2 पर टी 1.id = t2.id पर बाएं जुड़ें टेबल 3 टी 3 पर टी 3 पर टी 2.आईडी = टी 3.आईडी  

जब तक आपके उप-प्रश्नों में जटिल तर्क न हो, तो यह संभवतः और अधिक पठनीय होगा यदि आप केवल FROM में तालिका का नाम निर्दिष्ट करते हैं।


Comments