2012-06-19 19 views
10

इस उदाहरण में शामिल हों हम एक SQLite डेटाबेस पर 3 संबंधित टेबल है:SQLite वाम बाहरी एकाधिक तालिकाओं

 test1 -> test2 (with c1 column) 
      test2 -> test3 (with c2 column).

मैं इस समाधान की कोशिश की है, लेकिन:

CREATE TABLE test1 (
    c1 integer, 
    primary key (c1) 
); 
CREATE TABLE test2 (
    c1 integer, 
    c2 integer, 
    primary key (c1, c2) 
);  
CREATE TABLE test3 (
    c2 integer, 
    c3 integer, 
    primary key (c2) 
); 

अब मैं सभी तालिकाओं में शामिल होने की जरूरत है यह नहीं चलता है:

SELECT 
    * 
    FROM test1 a 
     LEFT OUTER JOIN test2 b 
         LEFT OUTER JOIN test3 c 
          ON c.c2 = b.c2 
      ON b.c1=a.c1 

यह मुझे एक त्रुटि देता है: near "ON": syntax error.

कोई मदद?

+1

कभी उपयोग नहीं किया sqlite3 से समझाया गया है, लेकिन सही मानक SQL सिंटैक्स वाम बाहरी शामिल हों है ... पर ... वाम बाहरी शामिल हों ... पर। .., और घोंसला शामिल नहीं है।) – raina77ow

+0

मैंने बिना किसी समस्या के ओरेकल, पोस्टग्रेएसक्यूएल और एसक्यूएल सर्वर पर इस वाक्यविन्यास का उपयोग किया है। – ferpega

+1

नेस्टेड जुड़ता है - या 'जॉइन (एक जॉइन दो जॉइन तीन) ऑन (one.id = two.id और two.some_id = three.some_id) '? – raina77ow

उत्तर

28

यह आपके ON कथन का एक साधारण गलत स्थान है। यह SQL मानक के अनुरूप है:

SELECT * 
FROM test1 a 
LEFT OUTER JOIN test2 b ON b.c1=a.c1 
LEFT OUTER JOIN test3 c ON c.c2=b.c2 

यह further depth here.

+0

धन्यवाद नथनील यह ठीक चलाता है। मैंने वर्षों के लिए पिछले एसक्यूएल प्रारूप का उपयोग किया है। लेकिन SQLite इसे बहुत पसंद नहीं करता है। – ferpega

+0

यह संभव है कि विशिष्ट (फैंसी?) कार्यान्वयन इसे पार्स करने में सक्षम हैं, लेकिन SQLite बस spec को पकड़ता है। –

संबंधित मुद्दे