Hi,
ich habe ein Problem mit einer Abfrage. Die Abfrage geht über drei Tabellen. Kurze Erklärung des Aufbaus:
generic_articles:
Hier sind alle Produktgruppen gelistet. Jede Produktgruppe hat mehrere Bezeichnungen, also generic_articles.ga_des_id, generic_articles.id_standard und generic_articles.id_assembly.
Jeder dieser IDS ist in der Tabelle lang2text zu finden. In dieser Tabelle ist die ID aus der vorherigen Tabelle, eine Sprach ID für die Sprache und der Verweis auf eine weitere Tabelle, welche den Text enthält. So wird quasi für jede ID der Text für jede Sprache definiert (lang2text.text_id), welcher dann aus der letzten Tabelle gelesen wird.
Alle Texte sind nun in der texts vorhanden und werden daraus ausgelesen.
Nun möchte ich in einer Abfrage alle Produktgruppen mit allen Beschreibungen in deutscher Sprache abfragen und habe diese SQL:
SELECT
ga_id, ga_nr, dt1.tex_text as description, dt2.tex_text as description_standard, dt3.tex_text as description_assembly
FROM
generic_articles ta join lang2text td1 on ta.ga_des_id = td1.des_id
left join texts dt1 on td1.text_id = dt1.tex_id left outer join lang2text td2 on ta.id_standard = td2.des_id
left outer join texts dt2 on td2.text_id = dt2.tex_id left outer join lang2text td3 on ta.id_assembly = td3.des_id
left outer join texts dt3 on td3.text_id = dt3.tex_id
WHERE td1.des_lng_id = 1 AND td2.des_lng_id = 1 AND td3.des_lng_id = 1
Die Abfrage haut soweit hin. Es kann aber sein, dass für eine Produktgruppe mal die eine oder andere Beschreibung fehlt. In diesem Falle wird dieser Datensatz nicht angezeigt.
Ich möchte, dass in diesen Falle der Datensatz nicht ausgeblendet wird, sondern statt dem Text einfach ein NULL zurückregeben wird. Ich weiß das dafür left joins zuständig sind, deswegen habe ich diesen SQL auch gebaut. Aber irgendwie klappt das bei fehlenden Texte nicht mit den NULL.
Weiß jemand wie ich die Abfrage abändern müsste damit es geht? Ich weiß leider nicht mehr weiter.
ich habe ein Problem mit einer Abfrage. Die Abfrage geht über drei Tabellen. Kurze Erklärung des Aufbaus:
generic_articles:
Hier sind alle Produktgruppen gelistet. Jede Produktgruppe hat mehrere Bezeichnungen, also generic_articles.ga_des_id, generic_articles.id_standard und generic_articles.id_assembly.
Jeder dieser IDS ist in der Tabelle lang2text zu finden. In dieser Tabelle ist die ID aus der vorherigen Tabelle, eine Sprach ID für die Sprache und der Verweis auf eine weitere Tabelle, welche den Text enthält. So wird quasi für jede ID der Text für jede Sprache definiert (lang2text.text_id), welcher dann aus der letzten Tabelle gelesen wird.
Alle Texte sind nun in der texts vorhanden und werden daraus ausgelesen.
Nun möchte ich in einer Abfrage alle Produktgruppen mit allen Beschreibungen in deutscher Sprache abfragen und habe diese SQL:
SELECT
ga_id, ga_nr, dt1.tex_text as description, dt2.tex_text as description_standard, dt3.tex_text as description_assembly
FROM
generic_articles ta join lang2text td1 on ta.ga_des_id = td1.des_id
left join texts dt1 on td1.text_id = dt1.tex_id left outer join lang2text td2 on ta.id_standard = td2.des_id
left outer join texts dt2 on td2.text_id = dt2.tex_id left outer join lang2text td3 on ta.id_assembly = td3.des_id
left outer join texts dt3 on td3.text_id = dt3.tex_id
WHERE td1.des_lng_id = 1 AND td2.des_lng_id = 1 AND td3.des_lng_id = 1
Die Abfrage haut soweit hin. Es kann aber sein, dass für eine Produktgruppe mal die eine oder andere Beschreibung fehlt. In diesem Falle wird dieser Datensatz nicht angezeigt.
Ich möchte, dass in diesen Falle der Datensatz nicht ausgeblendet wird, sondern statt dem Text einfach ein NULL zurückregeben wird. Ich weiß das dafür left joins zuständig sind, deswegen habe ich diesen SQL auch gebaut. Aber irgendwie klappt das bei fehlenden Texte nicht mit den NULL.
Weiß jemand wie ich die Abfrage abändern müsste damit es geht? Ich weiß leider nicht mehr weiter.
Kommentar