2017-08-16 93 views
2

尋求一些幫助,試圖從我的銷售點數據庫中獲取一些信息。這是一個MS Sql 13.0.4001.0數據庫SQL服務器內部連接不返回說明

我有兩個表。一個「股票」表和一個「股票UDF」表。他們看起來有點像這樣:

庫存表讓我們稱之爲「ST」和股票UDF表「SU」

股票表具有以下的列

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

股票UDF表具有下面列

ID, Description 

我想創建一個返回記錄,但代替UDF1 ID專欄中,我想從SU表中的描述下的ID查詢。

在ST樣本記錄目前看起來是這樣的

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

蘇表看起來像這樣

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

我想創建一個返回以下

SKU Description UDF1  UDF2 UDF3 UDF4 
1000 Oranges  Salads Fruit Desserts 
查詢

不知道如何正確完成內部連接。

事情是這樣的:

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連接類型,否則在連接表中沒有匹配的情況下,您將不返回任何行。

編輯

我已經添加COALESCE()功能,因此在事件su.Decription場返回NULL,查詢將實際輸出,而不是NULL的一個空字符串。 COALESCE()是一個方便的函數,它返回其參數集中的第一個非空值。

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

即使缺少記錄,您仍需要使用左連接,因爲您需要庫存描述。指定連接或內部連接意味着記錄/字段不能爲空並返回。

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

由於有在[Stock]表(UDF1 ID, UDF2 ID,UDF3 ID,UDF4 ID)4個的外鍵,你需要加入[Stock UDF]表4倍。

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

相關問題