【SQL Server】マルチパート識別子****をバインドできませんでした。
2022-10-13 | SQL, SQL Server
SQL Serverで「マルチパート識別子****をバインドできませんでした。」が発生する原因と対策だよ!
概要
今回の記事では、SQL Serverで「マルチパート識別子****をバインドできませんでした。」が発生する原因と対策について掲載する。
仕様書
環境
- SQL Server 15.0.2095
原因
例として、会社名のテーブルCompany
部署名のテーブルDepartment
社員の氏名のテーブルEmployee
があり、Employee
->Department
->Company
みたいな感じで連結するケースを挙げる。
SELECT
EmployeeID,
Name
FROM
Employee
JOIN Company ON Department.DepartmentID = Company.CompanyID
JOIN Department ON Employee.DepartmentID = Department.CompanyID
このクエリを実行すると下記のように出力される。
メッセージ 4104、レベル 16、状態 1、行 6
マルチパート識別子 "Department.DepartmentID" をバインドできませんでした。
原因は、6行目JOIN Company ON Department.DepartmentID = Company.CompanyID
の時点でテーブルDepartment
が定義されておらず、名前解決できないので発生してる。
SQLではJOIN
の順番が反映されるので、入力する順番を考慮する必要がある。
手順書
6行目と7行目を入れ替え、前もってテーブルDepartment
を定義する。
SELECT
EmployeeID,
Name
FROM
Employee
JOIN Department ON Employee.DepartmentID = Department.CompanyID
JOIN Company ON Department.DepartmentID = Company.CompanyID
まとめ(感想文)
分かれば当たり前だとは思うんだけども、JOIN
は全て同レベルで処理されてるような気もするじゃんないですかあ。(言い訳)