2012-08-31 12 views
7

Tengo dificultades para crear la consulta de triple unión.MySQL triple join

Tengo tres tablas:

House:

house ID(key) | Address | personID | 

persona:

personID (key) | Name | Address | 

archivo: // de casa

imageID (key) | personID | url | 

Me gustaría limitar los resultados a .

Quiero consultar direcciones de casa (principal), su nombre de propietario & dirección, y una foto del propietario.

Nota: Hay hasta 3 imágenes de cada persona (3 filas en la tabla de imágenes), pero solo una es necesaria, no importa cuál.

+2

una persona puede ser dueño de varias casas? una persona-fila solo contiene UNA ID de la casa ?! cómo esto será posible? – TheHe

+1

Suelta la columna house_id de persona y en su lugar agrega una columna owner_id a la tabla de la casa, o probablemente sea mejor, crea una tabla owner_house con las columnas owner_id, house_id. – Icarus

+0

@TheHe mi error lo siento, lo arreglé. –

Respuesta

19
SELECT h.Address, p.Name, p.Address as OwnerAddress, i.url FROM house AS h 
INNER JOIN person AS p ON p.personID = h.personID 
INNER JOIN images AS i ON i.personID = p.personID 
GROUP BY h.houseID 

debería funcionar para usted.

+0

Gracias por tu ayuda :) –

2

Tal vez será mejor que para poder utilizar LEFT OUTER JOIN, algo así como

SELECT 
    h.Address as `h_address`, 
    p.Name  as `p_name`, 
    p.Address as `p_address`, 
    i.url  as `i_url` 
FROM house AS `h` 
    LEFT OUTER JOIN person AS `p` ON (p.personID = h.personID) 
    LEFT OUTER JOIN images AS `i` ON (p.personID = i.personID) 
GROUP BY h.houseID 

Sería mostrar también casas sin imágenes registradas.

-1

unen tres mesas

es decir:

select i_f.*, i_f_d.* , i_f_c.creator_name 
    from indent_form i_f 
    join indent_form_details i_f_d on i_f.id=i_f_d.ind_id 
    join indent_form_creator i_f_c on i_f.user_id=i_f_c.id 

indent_form table 1, 
indent_form_details table 2, 
indent_form_creator table 3,