Hallo Rolf,
hmmm ... ich übersehe da etwas ... dein Beispiel funktioniert bei mir auch! Aber ich sehe den Unterschied zwischen deinem und meinem Beispiel nicht.
Ich habe nun ein POC zusammengebastelt mit meinen Daten. Hier tritt der "Fehler" auf. Könntest du das bitte ausführen und den output verifizieren?
-- define temporary available lang
DROP TEMPORARY 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');
-- define temporary i18n_test
DROP TEMPORARY TABLE IF EXISTS i18n_test;
CREATE TEMPORARY TABLE IF NOT EXISTS `i18n_test` (
id VARCHAR(36),
locale VARCHAR(6) DEFAULT NULL,
foreign_key VARCHAR(36) DEFAULT NULL,
`text` MEDIUMTEXT
);
INSERT INTO `i18n_test` (`id`, `locale`, `foreign_key`, `text`) VALUES ('84285a7a-2147-4c2d-94df-5ff2754c4033', 'en_US', 'cc0d1b70-637d-4f1f-89e5-2d74f26226f5', 'other');
INSERT INTO `i18n_test` (`id`, `locale`, `foreign_key`, `text`) VALUES ('b28f3622-5480-4c52-8356-e476e897c991', 'de_DE', 'cc0d1b70-637d-4f1f-89e5-2d74f26226f5', 'andere');
INSERT INTO `i18n_test` (`id`, `locale`, `foreign_key`, `text`) VALUES ('b58a1117-01dd-450b-8526-223bb7e8b525', 'it_IT', 'cc0d1b70-637d-4f1f-89e5-2d74f26226f5', 'altro');
-- query with join
SELECT
available_lang.locale AS available_locale
, i18n_test.id
, i18n_test.foreign_key
, i18n_test.locale AS i18n_locale
, i18n_test.`text`
FROM available_lang
LEFT JOIN i18n_test
ON i18n_test.locale = available_lang.locale
AND i18n_test.foreign_key = 'cc0d1b70-637d-4f1f-89e5-2d74f26226f5';
-- query with where
SELECT
available_lang.locale AS available_locale
, i18n_test.id
, i18n_test.foreign_key
, i18n_test.locale AS i18n_locale
, i18n_test.`text`
FROM available_lang
LEFT JOIN i18n_test
ON i18n_test.locale = available_lang.locale
WHERE i18n_test.foreign_key = 'cc0d1b70-637d-4f1f-89e5-2d74f26226f5'
OR i18n_test.foreign_key = NULL;
Ergebnis erstes Query (JOIN):
available_locale | id | foreign_key | i18n_locale | text |
---|---|---|---|---|
en_US | 84285a7a-2147-4c2d-94df-5ff2754c4033 | cc0d1b70-637d-4f1f-89e5-2d74f26226f5 | en_US | other |
de_DE | b28f3622-5480-4c52-8356-e476e897c991 | cc0d1b70-637d-4f1f-89e5-2d74f26226f5 | de_DE | andere |
it_IT | b58a1117-01dd-450b-8526-223bb7e8b525 | cc0d1b70-637d-4f1f-89e5-2d74f26226f5 | it_IT | altro |
fr_FR | \N | \N | \N | \N |
Ergebnis zweites Query (WHERE fr_FR fehlt):
available_locale | id | foreign_key | i18n_locale | text |
---|---|---|---|---|
de_DE | b28f3622-5480-4c52-8356-e476e897c991 | cc0d1b70-637d-4f1f-89e5-2d74f26226f5 | de_DE | andere |
en_US | 84285a7a-2147-4c2d-94df-5ff2754c4033 | cc0d1b70-637d-4f1f-89e5-2d74f26226f5 | en_US | other |
it_IT | b58a1117-01dd-450b-8526-223bb7e8b525 | cc0d1b70-637d-4f1f-89e5-2d74f26226f5 | it_IT | altro |