2012-06-19 18 views
10

W tym przykładzie mamy 3 powiązanych tabel na SQLite database:sqlite LEFT OUTER JOIN wielu tabel

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) 
); 

Teraz muszę dołączyć wszystkie tabele:

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

Próbowałem tego rozwiązania, ale to nie działa:

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

daje mi błąd: near "ON": syntax error.

Każda pomoc?

+1

nigdy nie używany sqlite3, ale poprawna standardowa składnia SQL jest LEFT OUTER JOIN ... ON ... LEFT OUTER JOIN ... ON. .., a nie zagnieżdżone połączenia.) – raina77ow

+0

Użyłem tej składni na Oracle, PostgreSQL i SQLServer bez żadnego problemu. – ferpega

+1

Zagnieżdżone połączenia - lub 'JOIN (jeden DOŁĄCZ dwa POŁĄCZ trzy) WŁ (jeden.id = dwa.ID I dwa.some_id = trzy.some_id)'? – raina77ow

Odpowiedz

28

Jest to proste zgubienie twojego oświadczenia ON. Jest to zgodne ze standardem 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 

Jest to wyjaśnione w further depth here.

+0

Dzięki Nathaniel to działa dobrze. Użyłem poprzedniego formatu sql od lat. Ale SQLite nie lubi tego zbytnio. – ferpega

+0

Jest możliwe, że konkretne (fantazyjne?) Implementacje są w stanie je przetworzyć, ale SQLite po prostu posiada specyfikację. –