2017-03-22 4 views
0

ich drei Tabellen haben:Sqlite3: Die Auswahl aus mehreren Tabellen ohne Duplikate

paper:    items:    attachments: 
============  ==============  ============== 
jkey | title  itemID | jkey*  itemID* | path 

* Fremdschlüssel aus einer anderen Tabelle

Ich versuche, die Titel aller Papiere und ihre zugehörigen Befestigungs abrufen Pfade, für alle Papiere, die Anhänge haben.

Aktuelle Versuch ist:

SELECT paper.title,attachments.path IN paper,attachments 
WHERE paper.jkey IN (
    SELECT items.jkey FROM items,attachments 
    WHERE items.itemID = attachments.itemID 
); 

Leider scheint dies nur Kauderwelsch (den gleichen Weg für verschiedene Titel und umgekehrt) zu drucken.

Was mache ich falsch?

Antwort

1

Wenn Sie teilnehmen möchten, sollten Sie verbindet:

SELECT paper.title, 
     attachments.path 
FROM paper 
JOIN items USING (jkey) 
JOIN attachments USING (itemID); 

doppelte Zeilen wegzulassen verwenden SELECT DISTINCT ... statt.

+0

Nur zu meinem eigenen Verständnis verbindet die erste Join-Anweisung Papier und Elemente unter jkey, und die zweite Join-Anweisung verbindet Elemente und Anhang unter itemID? – tetris11

+0

Ja. (Siehe [Dokumentation] (http://www.sqlite.org/lang_select.html#fromclause).) –