2009-08-11 89 views
6

LEFT JOINing SQLクエリ内のテーブルの場合、ON句で複数のテーブルを参照する必要があることがあります。たとえば:SQLエラー:複数パート識別子「tableName.ColumnName」をバインドできません

SELECT p.Name, j.Job, s.Salary 
FROM PeopleTable p, JobTable j 
LEFT JOIN SalaryTable s ON s.PeopleID=p.PeopleID AND s.JobID=j.JobID 

しかし、上記のこのエラーを与える:

SQL Error: The multi-part identifier "p.PeopleID" could not be bound.

LEFT JOIN文のON句はのみFROMに記載されている最後のテーブルを「見る」ことができるようですリスト。これは本当ですか?回避策はありますか?

+0

を参照してください:http://stackoverflow.com/questions/1080097/the-multi-part-identifier-could-not-be-bound-on-以前の旧式の構文で既に十字結合として書かれていたので、sql-server-2005-8/1080407#1080407 –

答えて

7

に置き換えることができますなぜ私はSHUREないです

SELECT p.Name, j.Job, s.Salary 
FROM SalaryTable s 
LEFT JOIN PeopleTable p on s.PeopleID = p.PeopleID 
LEFT JOIN JobTable j ON s.JobID = j.JobID 
+1

それはあなたがそれらを混在させることができるようだが、順序が重要な試みである:* \tからmsdb..sysjobsteps Sを選択し、J はj.category_id = c.category_id ただし、jにmsdb..syscategories cを参加msdb..sysjobs。 job_id = s.job_id –

+1

ですが、JerSchneidが望むようにそれらを混在させることは明らかに異なります! –

+0

私は、ロジックを解決しようとすると、外部結合がコンパイラに解決できない問題を引き起こしていると推測しています。 (外部結合条件の特異性は、両者の間で大きく異なるものの1つです)。 – RBarryYoung

0

そのSIが、PeopleTable Pから、JobTable jはCROSS JOINを

SELECT p.Name, j.Job, s.Salary 
FROM PeopleTable p 
    CROSS JOIN JobTable j 
    LEFT JOIN SalaryTable s ON s.PeopleID=p.PeopleID AND s.JobID=j.JobID 

ベストRegrads、あなたがすることはできません Iordan

0

をお試しくださいSQL-92結合構文 "table、table"とSQL-92 Join構文を混在させる "LEFT JOINテーブルON条件"

+0

となりました。私は彼が書いたことが本当に必要なものだと確信していない。 – HLGEM

3

クロス結合構文は、提供された内容を直接翻訳するものですが、状況によっては正しくない可能性があります。給与テーブル に参加する前に、すべての人をすべての仕事に関連付けることになりました。これはあなたの望むものではないようです。

実際に給与に関連付けられていない人がいますか?あなたは給料や人と関係のない仕事を見たいですか?サンプルデータと結果セットは、本当に必要なことを行うクエリを提供するのに役立ちます。私はあなたに良い結果を与えるかもしれない次のいずれかを疑う:

SELECT p.Name, j.Job, s.Salary 
FROM PeopleTable p 
JOIN SalaryTable s ON s.PeopleID=p.PeopleID 
RIGHT JOIN JobTable j ON s.JobID=j.JobID 

SELECT p.Name, j.Job, s.Salary 
FROM PeopleTable p 
JOIN SalaryTable s ON s.PeopleID=p.PeopleID 
JOIN JobTable j ON s.JobID=j.JobID 

SELECT p.Name, j.Job, s.Salary 
FROM SalaryTable s 
RIGHT JOIN PeopleTable p ON s.PeopleID=p.PeopleID 
RIGHT JOIN JobTable j ON s.JobID=j.JobID 
+0

私は実際にそれらのテーブルを例として作成しました。私はこのタイプのテーブル、テーブルに入り込み、毎回一度も問題を残さず、私の質問を並べ替える以外に、私が知らなかったトリックがどこにあるのか疑問に思っていました。 – JerSchneid

関連する問題