Re: Eleganteres SELECT mit LEFT JOIN
am 31.03.2008 08:16:09 von Frank Arthur>>> +----+-------+----+------+
>>> | Id | Foo | Id | Bar |
>>> +----+-------+----+------+
>>> | 1 | Hallo | 1 | Hi |
>>> | 2 | Welt |NULL| NULL |
>>> +----+-------+----+------+
>
>> Ein gutes Beispiel, warum man SELECT * nicht benutzen sollte. Versuch's
>> mal mit SELECT Foo, A.Id, Bar statt SELECT *.
>
> Klar, das habe ich ja jetzt auch eingebaut, aber bei ca. 40 Spalten wird
> das SELECT dann ungemütlich lang, weshalb ich auf eine elegantere
> Möglichkeit gehofft hatte. Die USING-Syntax hilft mir im konkreten Fall
> auch nicht, weil das gewünschte Verhalten offenbar (lt. MySQL-Doku) erst
> ab Version 5 implementiert ist, und ich es hier leider noch mit einer
> 4er-Version zu tun habe. Aber immerhin habe ich wieder mal was gelernt
> ;-)
Dann mach's doch einfach so:
SELECT `B`.*, `A`.*
FROM `A`
LEFT JOIN `B`
ON A.Id = B.Id;
+------+------+----+-------+
| id | Bar | Id | Foo |
+------+------+----+-------+
| 1 | Hi | 1 | Hallo |
| NULL | NULL | 2 | Welt |
+------+------+----+-------+
Dann überschreiben alle Spalten von A die von B, also auch die Id.
Oder:
SELECT *, `A`.`Id`
FROM `A`
LEFT JOIN `B`
ON A.Id = B.Id;
+----+-------+------+------+----+
| Id | Foo | id | Bar | Id |
+----+-------+------+------+----+
| 1 | Hallo | 1 | Hi | 1 |
| 2 | Welt | NULL | NULL | 2 |
+----+-------+------+------+----+
Dann hast du unter Garantie den Wert Id von der Tabelle A im Ergebnis.