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

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

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

2023年1月13日に作成されたページです。
情報が古かったり、僕が今以上のど素人だった頃の記事だったりする可能性があります。

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

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.id) = [検索値]

このとき、親クエリの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.id) = [検索値]

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

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

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