2011-11-16 14 views
0

私はほとんどそこにいますが、私が必要とする結果をかなり返すわけではありません。複数の結合とコンパウンドを選択したMySQLクエリ

私は3つのテーブルを持っています。 program_location、hcp_data、guest_data、すべて適切な主キーを使用します。

hcp_dataの各行には、1つのプログラム位置に対する(外部キーによる)参照が含まれています。 guest_dataの各行には、hcp_dataの行への参照が含まれています。 1つのhcp_dataエントリに複数のゲストが接続されている可能性があります。これらのテーブルは、パーティの場所、招待者、招待者がそれぞれ同じ場所に持ち込むことを選択すると考えてください。こうして、彼らの関係を介して、私は彼らがリンクされているhcpの場所によってゲストの場所を知ることができます。

私がやろうとしているのは、hcp_dataテーブルとadditional_guestテーブルからすべての行を選択し、program_locationsテーブルからいくつかの列を各行に結合することです。基本的には、データを単一のフラットファイルとして扱うようにデータをダンプすることです。

は、ここで私が持っているものです。

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 

最後のONは、現時点では空白になっています。これが私が立ち往生している場所だと私は信じています。私は両サイドのコンポジットセレクトをする必要があると思いますが、私はよくわかりません。

助けてください!ありがとう!

編集、各テーブルの主キーは、単に "id"を先頭に付けたテーブル名、つまり "idprogram_location"です。 外部キーは元のテーブル、アンダースコア、列の名前です。彼らが来るテーブル:すなわち "program_location_idprogram_location"

答えて

0

私はそれを理解しました。より簡単で良い方法があれば(これは私が疑うことではありません)、共有してください!

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))); 
関連する問題