2017-08-16 94 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

相关问题