2012-11-26 37 views
6

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

SELECT * 
FROM table1 LEFT JOIN table2 
    ON table1.id1 = (SELECT id2 FROM table2 LIMIT 1); 

में शामिल होने के लेकिन जब मैं पहुँच

SELECT * 
FROM table1 LEFT JOIN table2 
    ON table1.id1 = (SELECT TOP 1 id2 FROM table2); 

में इसका इस्तेमाल करने की कोशिश मैं सिंटेक्स त्रुटि मिलता है। क्या यह वास्तव में पहुंच या मेरी गलती में असंभव है?

मुझे पता है कि मैं WHERE के साथ एक ही परिणाम प्राप्त कर सकता हूं, लेकिन मेरा प्रश्न एक्सेस में JOIN की संभावनाओं के बारे में है।

उत्तर

8

यह संभव नहीं है, MSDN documentation प्रति:

सिंटेक्स

से table1 [वाम |

फ़ील्ड 1, field2: फ़ील्ड शामिल हो गए हैं के नाम सही] चालू table1.field1 compopr table2.field2

table2 और (जोर मेरा) में शामिल हों। फ़ील्ड एक ही डेटा प्रकार का होना चाहिए और उसी प्रकार का डेटा होना चाहिए, लेकिन उन्हें एक ही नाम रखने की आवश्यकता नहीं है।

ऐसा प्रतीत होता है कि आपके शामिल होने में आपके पास हार्ड-कोड किए गए मूल्य भी नहीं हो सकते हैं; आपको इसके खिलाफ शामिल होने के लिए कॉलम नाम निर्दिष्ट करना होगा।

आपके मामले में, आप चाहेंगे:

SELECT * 
FROM Table1 
LEFT JOIN (
    SELECT DISTINCT TOP 1 ID 
    FROM Table2 
    ORDER BY ID 
) Table2Derived ON Table1.ID = Table2Derived.ID 
+0

+1 मैं लगभग सभी मामलों में उप प्रश्नों से दूर ले जाकर कर रहा हूँ के रूप में ली गई तालिकाओं ज्यादातर मामलों में अधिक से अधिक प्रदर्शन देने के –