Guten Abend,
ich verstehe etwas Grundlegendes nicht und zwar:
Gegeben sei eine Übersetzungstabelle. Eine Zeile besteht aus einer "id", der Sprache "locale", einem Fremdschlüssel "foreign_key" und dem Übersetzten Text "text".
Ich erzeuge nun eine temporäre Tabelle mit welcher ich die Sprachen abgleichen möchte:
DROP TABLE IF EXISTS available_lang;
CREATE TEMPORARY TABLE IF NOT EXISTS `available_lang` (
locale VARCHAR(6) DEFAULT NULL
);
INSERT INTO available_lang (locale) VALUES ('de_DE'),('en_US'),('it_IT'),('fr_FR');
Um die fehlenden Sprachen anzuzeigen verwende ich folgendes Query:
SELECT
-- alle spalten
FROM available_lang
LEFT JOIN i18n
ON i18n.locale = available_lang.locale
AND foreign_key = 'cc0d1b70-637d-4f1f-89e5-2d74f26226f5'
Das funktioniert.
Die Frage ist warum liefert folgendes Query nicht ein identisches Ergebnis:
SELECT
-- alle spalten
FROM available_lang
LEFT JOIN i18n
ON i18n.locale = available_lang.locale
WHERE
foreign_key = 'cc0d1b70-637d-4f1f-89e5-2d74f26226f5'
OR foreign_key IS NULL
Müsste es doch? Aber ich glaube, ich übersehe da was Grundlegendes.
lg mark