2011-11-16 7 views
0

Je suis presque là mais je ne retourne pas tout à fait les résultats dont j'ai besoin.Requête MySQL avec plusieurs jointures et sélection de composés

J'ai 3 tables. program_location, hcp_data, guest_data, toutes avec les clés primaires appropriées.

Chaque ligne de la commande hcp_data inclut une référence (par clé étrangère) à 1 emplacement de programme. Chaque ligne dans guest_data inclut une référence à une ligne dans hcp_data. Plusieurs invités peuvent être liés à une entrée hcp_data. Considérez ces tables comme des lieux de fête, des invités et les personnes que ces invités ont choisi d'emmener avec eux au même endroit, respectivement. Ainsi, via leurs relations, je peux déterminer l'emplacement d'un invité par l'emplacement de l'hcp, ils sont liés. Donc, ce que j'essaie de faire est de sélectionner toutes les lignes des tables hcp_data et additional_guest et de joindre à chaque ligne quelques colonnes de la table program_locations. Essentiellement, le but est de vider les données afin qu'elles aient un sens en tant que fichier plat unique.

Voici ce que j'ai:

SELECT lname, fname, degree, email, job_title, office_addr_line_1, office_addr_line_2, hcp_data.city, hcp_data.state, hcp_data.zip, phone, timestamp, program_location.restaurant_name, program_location.city AS restaurant_city, program_location.state AS restaurant_state 
FROM hcp_data 
LEFT JOIN program_location 
ON hcp_data.program_location_idprogram_location = program_location.idprogram_location 
UNION 
SELECT lname, fname, degree, email, job_title, office_addr_line_1, office_addr_line_2, additional_guest.city, additional_guest.state, additional_guest.zip, phone, timestamp, program_location.restaurant_name, program_location.city AS restaurant_city, program_location.state AS restaurant_state 
FROM additional_guest 
LEFT JOIN program_location 
ON 

La dernière ON est vide pour le moment. Je crois que c'est là où je suis coincé. Je pense que je vais devoir faire un choix composite pour l'un des côtés mais je ne suis pas sûr.

Aidez s'il vous plaît! Merci! Editer, BTW, les clés primaires de chaque table sont simplement le nom de la table avec "id" ajouté à l'avance, ie "idprogram_location" Les clés étrangères sont la table dont elles proviennent, soulignent, le nom de la colonne dans la table d'où ils viennent: "program_location_idprogram_location"

Répondre

0

Donc, je l'ai compris. S'il y a un moyen plus facile ou meilleur (dont je ne doute pas) s'il vous plaît partager!

SELECT lname, fname, degree, email, job_title, office_addr_line_1, office_addr_line_2, hcp_data.city, hcp_data.state, hcp_data.zip, phone, timestamp, program_location.restaurant_name, program_location.city AS restaurant_city, program_location.state AS restaurant_state 
FROM hcp_data 
LEFT JOIN program_location 
ON program_location.idprogram_location = hcp_data.program_location_idprogram_location 
UNION 
SELECT lname, fname, degree, email, job_title, office_addr_line_1, office_addr_line_2, additional_guest.city, additional_guest.state, additional_guest.zip, phone, timestamp, program_location.restaurant_name, program_location.city AS restaurant_city, program_location.state AS restaurant_state 
FROM additional_guest 
LEFT JOIN program_location 
ON program_location.idprogram_location = 
(SELECT idprogram_location 
FROM program_location 
WHERE idprogram_location = 
(SELECT program_location_idprogram_location 
FROM hcp_data 
WHERE idhcp_data = 
(SELECT hcp_data_idhcp_data 
FROM additional_guest LIMIT 1))); 
Questions connexes