Claudius L.: Bei Bedingung andere Tabelle verwenden

Beitrag lesen

Hallo nochmal!

Ich dachte, IF() sei mein Freund - entworfen habe ich folgendes SQL:
SELECT IF(text__general_en.text= NULL, (SELECTtextFROM text__general_de WHEREid= "foo"), (SELECTtextFROM text__general_en WHEREid= "foo"))

Ich habe an diesem Ansatz noch ein wenig herumgewerkelt. Nach ein klein wenig nachdenken ist mir klar geworden, dass das Problem, dass text\_\_general\_en.text nicht bekannt ist, eigentlich ja ganz einfach zu lösen ist. Schließlich kann ich an dieser Stelle ja auch einfach ein SELECT schreiben und den gewünschten Wert ermitteln:

SELECT IF(  
	((SELECT `text` FROM `text__general_en` WHERE `id` = "foo") = NULL),  
	(SELECT `text` FROM `text__general_de` WHERE `id` = "foo"),  
	(SELECT `text` FROM `text__general_en` WHERE `id` = "foo")  
	)  
AS `text`

Soweit so gut - oder nicht. Denn die Prüfung auf = NULL scheint so nicht zu stimmen. Jedenfalls erhalte ich nicht die gewünschten Werte. Daraufhin habe ich ein wenig herumgestochert und wild mit Werten wie true und false herumgetestet. Was dabei herauskam funktioniert zwar, ist aber unlogisch:

SELECT IF(  
	((SELECT `text` FROM `text__general_en` WHERE `id` = "foo") = false),  
	(SELECT `text` FROM `text__general_en` WHERE `id` = "foo"),  
	(SELECT `text` FROM `text__general_de` WHERE `id` = "foo")  
	)  
AS `text`

Mit diesem SQL erhalte ich:
- text.text__general_en wenn dieses nicht NULL ist
- text.text__general_de wenn text.text__general_en NULL ist

Das will ich. Allerdings scheint es mir eher zufällig, dass ich das bei meinem SQL auch bekomme. Denn immerhin sollte ich ja eigentlich (laut SQL) text__general_en.text bekommen, wenn dieses false ist.

Ich denke, das Problem ist, dass ich die Bedingung nicht korrekt formuliere. Kann mir jemand verraten, wie ich die Bedingung abändern muss, damit ich text__general_en.text bekomme, wenn dieses nicht NULL ist und ich text__general_de.text bekomme, wenn text__general_en.text NULL ist (unabhängig von text__general_de.text)?

Grüße,

Claudius