作成: 更新:
【SQL嫌い】UNION句節インラインビューにすると辛い【独り愚痴】
この記事は最終更新日から1年以上が経過しています。この記事は最終更新日から12か月以上が経過しています。
このエントリーは約1分で読めます。
結論
問題切り分けて細かくして確認することが重要
実例
以下のSQLをみた時、エラーになるんですけど、何がダメだと思います?
SELECT
member.id
FROM
team
LEFT JOIN (
SELECT
team.member_id,
team.member_manager_id
FROM
team
LEFT JOIN client ON client.id = team.member_id
WHERE
team.member_id IS NOT NULL
UNION ALL
SELECT
team.next_member_id,
team.next_member_manager_id
FROM
team
LEFT JOIN client ON client.id = team.next_member_id
WHERE
team.next_member_id IS NOT NULL
) AS member ON member.id = team.member_id
パッとわかる人は
SQL得意なんですね。。。
僕嫌いです。。。
正解はmember.id
なんて存在しません!でした!
これ、言われたらすぐわかるんですけど
サブクエリやインラインビュー3階層くらいになってくると
まじで分からなくなる。。。
(1時間これにかかったとは言えない)
- サブクエリやインラインビューがネストしてる時は
必ず一番深いネストから順番にSQL回して確認してく! UNION
がサブクエリやインラインビューの場合は
外側の値を使ってないか確認する!
(外側の値は参照できないよー)
これを着実にやるしかないですね。
もんだい切り分け重要。
"