2011-08-22 25 views
5

Tengo una situación en la que una tabla de propiedades contiene una identificación de dirección (de la tabla g_addresses) y una tabla solicitante también tiene una ID de dirección de g_addresses. Me gustaría unir estos a la vez pero seleccionar todos los campos en la tabla.Mysql - Cómo alias una tabla completa en una combinación izquierda

Sé de usar 'como' para hacer un alias para los campos, pero ¿hay alguna manera de producir un alias para toda una tabla?

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 

Esto produce un resultado que contiene sólo una fila de direcciones y no ambos, La fila que se devuelve es la fila de la final de unirse y no la que previamente, lo que indica que es sobrescribir cuando se devuelve.

+3

como obras para las tablas, así . – Cfreak

Respuesta

11

No creo que se debe utilizar referencias enmascarados, como * o `reference`.*, en su caso, ya que puede terminar con un conjunto de filas que contiene la columna idéntica nombres (id, address_id).

Si desea extraer todas las columnas de las tablas combinadas, probablemente debería especificar de forma individual en la cláusula SELECT y asignar un alias único a cada uno de ellos:

SELECT 
    ref.`id` AS ref_id, 
    ref.`…` AS …, 
    … 
    app.`id` AS app_id, 
    … 
FROM `reference` AS ref 
LEFT JOIN `applicants` AS app ON app.`id` = ref.`applicant_id` 
LEFT JOIN `g_people` AS ape ON ape.`id` = app.`person_id` 
LEFT JOIN `g_addresses` AS apa ON apa.`id` = app.`address_id` 
LEFT JOIN `properties` AS pro ON pro.`id` = ref.`property_id` 
LEFT JOIN `g_addresses` AS pra ON pra.`id` = pro.`address_id` 
WHERE ref.`id` = 4 
+0

¡Gracias, lo usé para mi solución final! – Anthony

+2

+1 para usar patillas –

1

ser más específico sobre columnas selecciona

SELECT 
    applicant_address.*, 
    property_address.*, 
    applicants.*, 
    applicant_person.*, 
    properties.* 
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 
+0

Me gustaría seleccionar cada una de las columnas de cada tabla; puede sonar como una exageración, ¡pero en esta situación es necesario! En otras palabras, ¿hay alguna manera de hacerlo sin escribir cada nombre de columna? Hay alrededor de 85 todos juntos. Aprecio la rápida respuesta. – Anthony

+0

@Anthony vea arriba, use 'tablename. *' Para cada alias de tabla –

Cuestiones relacionadas