【SQL】1つのレコードで複数の外部キーが同じテーブルを参照する場合のSQL文
『CakePHP Users in Japan』のフォーラム内の同名のスレッドには
CakePHPのModelの設定の仕方が載ってますが、素のSQLでは
どう書くんでしょうか?
★目指す結合テーブルの形
チーム№ | リーダー | サブ |
---|---|---|
1 | 安藤 | 鹿島 |
2 | 斉木 | 竜口 |
team(外部キーを持ち、基礎となるテーブル)
id | leader_id (外部キー) | sub_id (外部キー) |
---|---|---|
1 | 1 | 2 |
2 | 3 | 4 |
member(外部キーが参照するテーブル)
id | name |
---|---|
1 | 安藤 |
2 | 鹿島 |
3 | 斉木 |
4 | 竜口 |
■外部結合する場合のSQL
※teamが優先される(team内の空白・無効セルがある行も表示される)
SELECT
team.id AS "チーム№",
Leader.name AS "リーダー",
Sub.name AS "サブ"FROM
teamLEFT JOIN
member AS Leader
ON
team.leader_id = Leader.idLEFT JOIN
member AS Sub
ON
team.sub_id = Sub.id
;
■内部結合する場合のSQL
※team内の空白・無効セルがある行は表示されない
SELECT
team.id AS "チーム№",
Leader.name AS "リーダー",
Sub.name AS "サブ"FROM
team,
member AS Leader,
member AS SubWHERE
team.leader_id = Leader.id
AND
team.sub_id = Sub.id
;
要するに、ひとつのテーブルに対して『AS』を使って別名をいくつも作れば
よい、と。
SQLに関して(も)ほとんど知識がない僕は、CakePHPのデバッグのレベルを
2に設定することで表示されるSQLを解読することで答えにたどりつきました。
…外部結合・内部結合の意味がやっとわかりました(w