Einzelnen Beitrag anzeigen

Der schöne Günther

Registriert seit: 6. Mär 2013
6.159 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

Verständnisfrage zu LEFT JOIN

  Alt 23. Jun 2021, 10:27
Datenbank: Sqlite • Version: 3 • Zugriff über: FireDAC
Ich stehe völlig auf dem Schlauch weshalb ein LEFT JOIN in Internet-Beispielen so funktioniert wie er soll, mit meinen Test-Daten allerdings nicht. Ich versuche es so kurz wie möglich zu machen.

Das sind meine zwei Mini-Tabellen:
er.png
Code:
CREATE TABLE items (
   id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
   someValue INTEGER
);

CREATE TABLE descriptions(
   id INTEGER NOT NULL,
   lang TEXT NOT NULL,
   description TEXT,
   CONSTRAINT descriptions_pk PRIMARY KEY (id, lang),
   CONSTRAINT descriptions_FK FOREIGN KEY(id) REFERENCES items(id) ON DELETE CASCADE   
);
Jetzt füllen wir sie noch mit ganz wenigen Daten:
Code:
INSERT INTO items VALUES
   (NULL, 42),
   (NULL, 4711),
   (NULL, 1234);
   
INSERT INTO descriptions VALUES
   (1, "DEU", "Die Antwort auf alles"),
   (1, "ENG", "The answer to everything"),
   (2, "DEU", "Eine gewöhnliche Zahl"),
-- (2, "ENG", "An ordinary number"),
   (3, "DEU", "Einfach zu tippen"),
   (3, "ENG", "Easy to type");
Wir sehen hier, dass ich für "item 2" die Sprache "ENG" weggelassen habe:
data.png


Jetzt hätte ich doch gedacht, dass ich mit einem LEFT OUTER JOIN eine Trefferliste eine evtl. fehlende Sprache mit NULL aufgefüllt wird.
Code:
SELECT * FROM items LEFT OUTER JOIN descriptions USING(id);
Ergebnis:
idsomeValuelangdescription
142DEUDie Antwort auf alles
142ENGThe answer to everything
24711DEUEine gewöhnliche Zahl
31234DEUEinfach zu tippen
31234ENGEasy to type

Ich hätte noch eine Weitere Zeile mit
idsomeValuelangdescription
24711NULLNULL
oder so erwartet.

So macht es keinen Unterschied, ob ich einfach nur JOIN oder LEFT (OUTER) JOIN sage.


Was mache ich anders als das Beispiel unter
https://www.w3resource.com/sqlite/sqlite-left-join.php?
sqlite-left-join-pictorial-example1.gif
Wenn ich das Beispiel bei mir nachstelle funktioniert es auch! Der einzige Unterschied ist vielleicht mein zusammengesetzter Primärschlüssel (id, lang) in "descriptions"?

Geändert von Der schöne Günther (23. Jun 2021 um 10:32 Uhr)
  Mit Zitat antworten Zitat