5

私は2つのテーブルを持っています

requests( ID, company_id, amount)

companies( ID, name)

FK 制約付き ( requests.company_id-> companies.id)

requests.companyすることができますNULL

すべてのリクエストを取得しcompany_id、適切な会社に置き換えるnameか、会社が指定されていない場合は空白のままにする必要があります。

次のクエリがあります。

SELECT R.[ID], C.[name] AS [company], R.[amount], ...
FROM [requests] AS R, [companies] AS C, ...
WHERE R.[company_id] = C.[ID]

フィールドにNULLが入るまで正常に機能していますcompany

私は次にやろうとしました:

SELECT R.[ID], C.[name] AS [company], ...
FROM [requests] AS R, ...
LEFT OUTER JOIN [companies] AS C
ON R.[company_id] = S.ID

しかし、得た

マルチパート識別子「R.company_id」をバインドできませんでした

そして、ON句シフトのフィールドで同じエラーが発生しました。私は何を間違っていますか?

4

3 に答える 3

3

私はあなたが欲しいと思います:

SELECT R.[ID], ISNULL(C.[name], '') AS [company]
FROM [requests] AS R
    LEFT OUTER JOIN [companies] AS C
ON R.[company_id] = C.ID

編集:コメントを参照してください。左の結合が必要です...

また、左結合は必要ないように見えるので、次のように書き直すことができます。

SELECT R.[ID], C.[name] AS [company]
FROM [requests] AS R
    JOIN [companies] AS C
ON R.[company_id] = C.ID
于 2009-07-03T16:48:48.680 に答える
1

コンマでテーブルの順序を変更すると、SQL Server 2005、2008、および 2012 で機能します

例えば

SQL 2005 以降で失敗する以下のようなクエリがあるとします。

SELECT t1.*,t2.*, t3.*
FROM table1 AS t1, table2 as t2 
LEFT OUTER JOIN table3 AS t3
ON t1.id = t3.id
WHERE t1.id = t2.id

クエリを書き直して、結合の前にコンマ内のテーブルの順序を変更すると、SQL 2005 以降でクエリが機能します。例えば

SELECT t1.*,t2.*, t3.*
FROM table2 as t2, table1 as t1 
LEFT OUTER JOIN table3 AS t3
ON t1.id = t3.id
WHERE t1.id = t2.id
于 2013-04-14T14:53:56.877 に答える