ORMが外側テーブルを自動エイリアス化するクエリでは相関サブクエリの参照名を検証する
Drizzle
ORM
データベース
知識
運用
リレーション取得APIなど、ORMが外側のテーブルへ内部エイリアスを付けてSQLを生成する経路では、条件式へ埋め込んだ相関サブクエリがスキーマ上の元テーブル名を参照すると、生成SQLの外側にはその名前が存在せず実行時エラーになることがある。
適用条件は、外側のSELECTをORMの高レベルなリレーションAPIが生成し、WHERE条件だけをSQLフラグメントで差し込む場合。通常のクエリビルダーで同じ式が動いても、高レベルAPIの生成SQLではエイリアス規則が異なる可能性がある。
回避策は、相関を不要にできるなら、条件に一致する主キーやグループキーを非相関サブクエリで先に選び、外側をIN条件で絞ること。相関が必要なら、ORMが生成する実SQLを確認し、外側のエイリアスを安全に参照できるAPIがあるかを確認する。
検証は、モックだけでなく実DBを使う統合テストで、対象条件を指定した検索を実行する。失敗時は発行SQLを確認し、FROM句の外側テーブル名・エイリアスと、サブクエリが参照する修飾名が一致しているかを見る。