2017-08-16 21 views
2

私の販売時点情報データベースから情報を取得しようとしています。これは、MS SQLの13.0.4001.0データベースですSQLサーバーの内部結合が返っていない説明

私は2つのテーブルがあります。 「在庫」テーブルと「在庫UDF」テーブル。彼らは、このように少し見える:在庫表ができます

コール「ST」と証券UDFテーブル「SU」

証券表には、次の列

SKU, Description, UDF1 ID, UDF2 ID,UDF3 ID,UDF4 ID 

を持っている証券UDFテーブルにあり次の列

ID, Description 

は、私が代わりに私はSUテーブルから説明を取得したいUDF1 ID列の下のIDのレコードを返すクエリを作成したいです。

は、STのサンプルレコードは、現在、SUテーブルは、私は、次の

SKU Description UDF1  UDF2 UDF3 UDF4 
1000 Oranges  Salads Fruit Desserts 
を返すクエリを作成したいこの

ID, Description 
1 Fruit 
2 Salads 
3 Desserts 
4 Vegetables 
5 Raw 
6 Cooked 

のように見えるこの

SKU, Description, UDF1 ID, UDF2 ID,UDF3 ID,UDF4 ID 
1000 Orange  2   1  3  Null 

のように見えます

内部結合を正しく行う方法がわかりません。このような

何か:

select st.SKU, st.Description, st.[UDF1 Id], st.[UDF2 Id], st.[UDF3 Id], st.[UDF4 Id] 
from [Stock] as st inner join [Stock UDF] as su on st.UDF1 ID = su.ID 

しかし、私が欲しいものを返しません。

ありがとうございます。

答えて

1

次のように、複数回の説明でテーブルに参加するだけで済みます。結合は暗黙的にINNER JOINなので、望む場合を除いてそのことを述べる必要はありません。ただし、この場合は、LEFT OUTER結合タイプを使用する必要があります。それ以外の場合は、結合テーブルに一致するものがない場合は、行を返しません。イベントにsu.DecriptionフィールドがNULLを返し、クエリではなくNULLの実際の出力は空の文字列となるように、私はCOALESCE()機能を追加しました

EDIT

COALESCE()は、その引数のセットで最初のNULL以外の値を返す便利な関数です。

SELECT st.SKU 
     ,st.Description 
     ,COALESCE(su1.Description, '') [UDF1 Desc] 
     ,COALESCE(su2.Description, '') [UDF2 Desc] 
     ,COALESCE(su3.Description, '') [UDF3 Desc] 
     ,COALESCE(su4.Description, '') [UDF4 Desc] 
FROM Stock st 
    LEFT JOIN [Stock UDF] su1 ON st.UDF1 = su1.ID 
    LEFT JOIN [Stock UDF] su2 ON st.UDF2 = su2.ID 
    LEFT JOIN [Stock UDF] su3 ON st.UDF3 = su3.ID 
    LEFT JOIN [Stock UDF] su4 ON st.UDF4 = su4.ID 
0

レコードが欠落していても在庫の説明を望むように、左結合を使用する必要があります。結合または内部結合を指定すると、レコード/フィールドをNULLに戻すことはできません。

select 
    st.SKU, st.Description, 
    st.[UDF1 Id], ISNULL(su1.Description,''), 
    st.[UDF2 Id], ISNULL(su2.Description,''), 
    st.[UDF3 Id], ISNULL(su3.Description,''), 
    st.[UDF4 Id], ISNULL(su4.Description,'') 
from [Stock] as st 
LEFT join [Stock UDF] as su1 on st.[UDF1 Id] = su1.ID 
LEFT join [Stock UDF] as su2 on st.[UDF2 Id] = su2.ID 
LEFT join [Stock UDF] as su3 on st.[UDF3 Id] = su3.ID 
LEFT join [Stock UDF] as su4 on st.[UDF4 Id] = su4.ID 
0

4つの外部キーは[Stock]テーブル(UDF1 ID, UDF2 ID,UDF3 ID,UDF4 ID)であるとして、あなたは[Stock UDF]テーブル4回に参加する必要があります。NULL値があるので

left join [Stock UDF] as su1 on st.UDF1 ID = su1.ID 
left join [Stock UDF] as su2 on st.UDF2 ID = su2.ID 
left join [Stock UDF] as su3 on st.UDF3 ID = su3.ID 
left join [Stock UDF] as su4 on st.UDF4 ID = su4.ID 

LEFT JOIN代わりのINNER JOINを使用することを検討してください。

関連する問題