Hallo!
Das ging aber schnell - dankeschön! ;)
Kann zwar jetzt antworten (bin auf Reisen und lebe gerade in einem Van, da ist das manchmal etwas schwierig ...) hatte seitdem dafür aber schon ein wenig Zeit, mir Gedanken zu machen.
viele wege führen nach rom, es lassen sich durchaus die gleichen ergebnisse mit anderen mtteln erzeugen. grundsätzlich würde ich bei deiner aufgabenstellung sagen, eine korrelierte unterabfrage ist dein freund und nicht der join.
Hm, ich habe mir mal die Handbuchseite zu korellierten Unterabfragen angesehen, aber mir ist nicht ganz klar dabei geworden, wie ich das auf mein Problem anwenden kann. Der Haken dabei ist, dass ich nicht weiß, was ich eigentlich hinter das SELECT schreiben soll. Ich habe das Gefühl, zu versuchen, das Pferd von hinten aufzuzäumen, da ich ja gerade herausfinden muss, was denn zu selektieren ist (also ob SELECT
tabelle1.text ...
oder SELECT
tabelle2.text ...
benötigt wird). So, wie ich das Handbuchbeispiel verstehe, wird die korellierte Unteraubfrage ja verwendet, um eine große Ergebnismenge anhand von Kriterien, die sich aus der Unterabfrage ergeben, zu reduzieren. Aber ich habe ja nicht viele Datensätze, sondern nur einen in jeder (von zwei) Tabellen ...
Da ich mich von Joins lieber noch ein wenig fernhalten würde, habe ich auf eigene Faust mal etwas ausprobiert (und gehofft, dass es keinen Grund dafür gibt, dass mir das keiner von euch beiden empfohlen hat ...). Ich dachte, IF() sei mein Freund - entworfen habe ich folgendes SQL:
SELECT IF(
text__general_en.text= NULL, (SELECT
textFROM text__general_de WHERE
id= "foo"), (SELECT
textFROM text__general_en WHERE
id= "foo"))
... und bekommen habe ich folgenden Fehler: "#1054 - Unknown column 'text__general_en.text' in 'field list'"
Ich schätze mal, das sich die unter Korellierte Unterabfragen beschriebene "Bereichsregel" ("MySQL wertet von innen nach außen aus") also nur auf Korellierte Unterabfragen bezieht und sich nicht auf IF() übertragen lässt. Denn - wenn ich das richtig sehe, ist das Problem doch, dass wenn die Bedingung geprüft wird, text\_\_general\_en.text
noch unbekannt ist, weil es eben erst später, im letzten SELECT ermittelt wird. Oder liege ich da falsch?
Auf jeden Fall komme ich so wohl nicht ans Ziel. Aber was ist der Fehler? Ist mein IF-Konzept prinzipiell der Holzweg und korellierte Unterabfragen bringen mich doch einfacher ans Ziel, wenn man sie richtig anzuwenden weiss? Oder bleibt am Ende nur der Join?
Gruß,
Claudius