2012-08-31 10 views
7

Sto avendo difficoltà a creare la query di triplo join.MySQL triple join

Ho tre tabelle:

Casa:

house ID(key) | Address | personID | 

persona:

personID (key) | Name | Address | 

Immagini: // di casa

imageID (key) | personID | url | 

Desidero limitare i risultati a .

Desidero interrogare l'indirizzo di casa (principale), il suo nome di proprietario & indirizzo e una foto del proprietario.

Nota: ci sono fino a 3 immagini di ogni persona (3 righe nella tabella immagini), ma solo una è necessaria, non importa quale.

+2

una persona può essere proprietario di più case? una fila di persone contiene solo UN ID di casa ?! come sarà possibile? – TheHe

+1

Rilascia la colonna house_id dalla persona e aggiungi invece una colonna owner_id alla tabella house, o probabilmente meglio, crea una tabella owner_house con owner_id, house_id columns. – Icarus

+0

@Il mio errore mi dispiace, l'ho risolto. –

risposta

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 

dovrebbe funzionare per voi.

+0

Grazie per l'aiuto :) –

2

Forse farei meglio per l'utilizzo di LEFT OUTER JOIN, qualcosa come

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 

Sarebbe visualizzare anche le case senza immagini registrate.

-1

uniscono tre tavoli

cioè:

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,