ど素人から毛を生やす。<延>

[MySQL]別名(エイリアス)とサブクエリの関係性

Web > Other 2023年1月13日(最終更新:22日前)

MySQLにてサブクエリを使用した検索を行います。

SELECT *
FROM tableA
WHERE (SELECT tableB.[検索カラム] FROM tableB WHERE tableB.id = tableA.id) = [検索値]

このとき、tableAが別名(エイリアス)になっていた場合は検索が可能でしょうか?

SELECT *
FROM tableA AS aliasA
WHERE (SELECT tableB.[検索カラム] FROM tableB WHERE tableB.id = aliasA.id) = [検索値]

答えは、可能です。
ただし実際にサブクエリを使う場合、だいたいは親(tableA)に紐づく子(tableB)を集計して検索したい、みたいな需要になります。

SELECT *
FROM tableA
	 INNER JOIN tableB ON tableA.id = tableB.id
WHERE (SELECT SUM(tableB.[検索カラム]) FROM tableB WHERE tableB.id = tableA.id GROUP BY tableB) = [検索値]

このとき、親クエリのtableA・tableBを別名にする場合、サブクエリはどうなるでしょうか?

SELECT *
FROM tableA AS aliasA
	 INNER JOIN tableB AS aliasB ON aliasA.id = aliasB.id
WHERE (SELECT SUM(tableB.[検索カラム]) FROM tableB WHERE tableB.id = aliasA.id GROUP BY tableB) = [検索値]

WHERE句で連結する親テーブルは、別名で指定する必要があります。
一方で別途集計するサブクエリのFROM句には、正規のテーブル名を指定しなければなりません。
※サブクエリのFROMで別途別名を付け、サブクエリ中で運用するのはOK

複雑なSQLでうっかりtableA・tableBの扱いを逆にしてしまい、エラーを食らったので備忘録でした。

この記事は役に立ちましたか?
  • _(:3」∠)_ 面白かった (0)
  • (・∀・) 参考になった (0)
  • (`・ω・´) 役に立った (0)