ich ein Schema in SQLite 3 haben, die wie folgt aussieht:Ärger mit voller schließt sich in SQLite3
CREATE TABLE tags(id INTEGER PRIMARY KEY, tag TEXT NOT NULL, UNIQUE(tag));
CREATE TABLE files(id INTEGER PRIMARY KEY, name TEXT NOT NULL, UNIQUE(name));
CREATE TABLE filetags(file_id INT NOT NULL, tag_id INT NOT NULL, UNIQUE(file_id, tag_id), FOREIGN KEY(file_id) REFERENCES files(id), FOREIGN KEY(tag_id) REFERENCES tags(id));
Ich habe versucht, eine Abfrage zu schreiben, die für eine bestimmte Datei-ID, jeden einzelnen Tag zeigt und wenn dieses Tag für diese ID gesetzt ist. Die nächstgelegene ich bekommen kann, ist so etwas wie die folgende:
SELECT * FROM tags t
LEFT OUTER JOIN filetags ft ON ft.tag_id=t.id
LEFT OUTER JOIN files f ON f.id=ft.file_id WHERE [email protected] OR
f.id IS NULL
, die für eine Datei arbeiten, die mit 1 oder mehr Tag hat, aber für eine Datei ohne Tags, es schließt alle Tags, die mindestens eine Datei . Ich habe verschiedene Varianten davon ausprobiert, aber scheint begrenzt zu sein, indem ich sqlite's Mangel an vollen und richtigen Joins umgehen musste.
vielleicht nützlich? http://stackoverflow.com/questions/1923259/full-outer-join-with-sqlite –