Bookmarks

Yahoo Gmail Google Facebook Delicious Twitter Reddit Stumpleupon Myspace Digg

Search queries

Use of assignment to $[ is deprecated at /usr/local/sbin/apxs line 86. , wwwxxx vim, mysql closing table and opening table, 800c5000, setgid operation not permitted, pciehp: acpi_pciehprm on IBM, WWWXXX.DBF, 078274121, info0a ip, should prodicers of software_based services be held liable or not liable for economic injuries

Links

XODOX
Impressum

#1: Re: Eleganteres SELECT mit LEFT JOIN

Posted on 2008-03-31 08:16:09 by 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.

Report this message