JOIN構文を使用する際に、関連付けられた値を持つ行を返す方法を理解しようとしている場合は、NULL
の場合はlinks
テーブルをチェックしてくださいNULL
JOIN
の場合はそれを使用します。行がNULl
の場合はON links.role_id = roles.role_id
です。 NULL
の場合はpeople
テーブルを使用してください。NULLでない場合は列を選択してから他を選択してください
マイ構文:
SELECT roles.role_name
FROM
(
people_links links
LEFT OUTER JOIN people people ON links.person_id = people.person_id
LEFT OUTER JOIN roles roles ON links.role_id = roles.role_id OR links.role_id = people.role_id
)
基本的に
参加とrole_id
でON
構文を使用しているとき、それはそれはlinks
テーブルに依存している必要がありますrole_id
から使用されているroles
テーブルから関連する値を返します。 を最初にとした場合、links.role_id
がNULL
であるかどうかを確認し、の場合はpeople.role_id
以外の場合はlinks.role_id
を返し、role_name
を取得してください。
このクエリを実行すると、先にlinks
テーブルを検索するときにpeople
テーブルのrole_id
テーブルが最初に使用されます。
私はCOALESCE
を使用してみましたが、それはrole_name
を返すべきときにのみ(擬似コード)例えばので、role_id
を返します。
SELECT IF(links.role_id IS NOT NULL) links.role_id ELSE people.role_id ENDIF as join_value
FROM
(
people_links links
LEFT OUTER JOIN people people ON links.person_id = people.person_id
LEFT OUTER JOIN roles roles ON roles.role_id = join_value
)
実際、以下の私の答えにもかかわらず - 私は今あなたがしようとしていることを理解していないと思います。期待どおりの結果を得てサンプルデータを表示できますか? – ruakh