Re: Eleganteres SELECT mit LEFT JOIN

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.