Mysql - Wie alias eine ganze Tabelle in einem left join
Ich habe eine situation, wo eine Eigenschaft Tabelle enthält eine Adress-id (aus der g_addresses Tabelle) und eine Bewerber-Tabelle auch hält eine Adress-id aus dem g_addresses.
Ich möchte auf der linken beizutreten, diese sich aber zusammen, wählen alle Felder in der Tabelle.
Ich wissen, "wie", um einen alias für Felder, aber gibt es eine Möglichkeit zum erzeugen eines alias für eine ganze Tabelle?
SELECT *
FROM (`reference`)
LEFT JOIN `applicants` ON `applicants`.`id` = `reference`.`applicant_id`
LEFT JOIN `g_people` applicant_person ON `applicant_person`.`id` = `applicants`.`person_id`
LEFT JOIN `g_addresses` applicant_address ON `applicant_address`.`id` = `applicants`.`address_id`
LEFT JOIN `properties` ON `properties`.`id` = `reference`.`property_id`
LEFT JOIN `g_addresses` property_address ON `property_address`.`id` = `properties`.`address_id`
WHERE `reference`.`id` = 4
Diese liefert ein Ergebnis mit nur einer Adresse-Zeile und nicht beide
Die Zeile, die zurückgegeben wird, wird die Zeile aus der letzten verbinden und nicht die, die zuvor, angibt, es zu überschreiben, wenn es zurückgegeben wird.
WIE funktioniert für Tabellen als auch.
InformationsquelleAutor Anthony | 2011-08-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube nicht, dass Sie verwenden sollten, maskiert Referenzen, wie
*
oder`reference`.*
, in Ihrem Fall, denn Sie können am Ende mit einer Zeile mit identischen Spaltennamen (id
,address_id
).Wenn Sie wollen ziehen Sie alle Spalten der verbundenen Tabellen, sollten Sie vielleicht angeben, die Sie einzeln in der SELECT-Klausel und vergeben Sie einen eindeutigen alias ein jeder von Ihnen:
+1 für die Verwendung von backticks
InformationsquelleAutor Andriy M
Etwas konkreter über die Spalten, die Sie wählen
siehe oben, verwenden Sie
tablename.*
für jede Tabelle aliasInformationsquelleAutor Michael Berkowski