首页 > 解决方案 > 在单独的列上连接

问题描述

我正在编写一个查询,它是更大数据提取查询的一部分。我坚持的部分最好解释如下:

表 1 (T1) 列

表 3 (T3) 列

表 6 (T6) 列

T1 是主表。T3 和 T1 使用 LocationID 和 ServiceCategory 连接。但是,这种组合在 T3 中可能存在重复项。因此,我正在使用:

LEFT JOIN(select distinct T3.LocationID,T3.ServiceCategory from Table3 where ServiceStatus in (2,3,4)) T3

ON T1.LocationID=T3.LocationID and T1.ServiceCategory=T3.ServiceCategory

当然,现在我没有 T3.ServiceType 来加入 Table6。当我最终进入 T3 和 T6 之间的连接时,我想保持 Table1 的记录数不变。我在进一步加入中使用 T6.ServiceRate 所以它对我的问题并不是特别重要。我基本上被表格的设计方式以及我需要如何创建连接所困扰。

我有一个次要问题,表 3 中的 ServiceCategory 由两种类型的 ServiceType 记录共享。在 LocationID 中,我只希望在我的SELECT语句中检索其中一个 ServiceCategory 记录。区别在于 ServiceType 是WI。我使用LEFT JOIN的原因是因为并非所有 T1.LocationID / T1.ServiceCategory 记录都有匹配项,因此不可能进行INNER JOIN

我正在寻求解决这些问题的帮助。如果需要,很高兴分享一些示例数据。

样本数据:

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

标签: sql-serverjoin

解决方案


不确定,如果我理解正确。你的意思是T3.ServiceType可能是Wor I

也许,您可以添加一个构造not EXISTS

SELECT
*
FROM
T1
LEFT JOIN(select distinct T3.LocationID,T3.ServiceCategory,T3 from Table3 where ServiceStatus in (2,3,4)) T3 
ON T1.LocationID=T3.LocationID and T1.ServiceCategory=T3.ServiceCategory

WHERE
(
T3.ServiceType = 'W' 
OR NOT EXISTS (SELECT TOP 1 1 from Table3 T3n WHERE T3n.ServiceStatus in (2,3,4) and T1.LocationID=T3n.LocationID and T1.ServiceCategory=T3n.ServiceCategory and T3n.ServiceType <> T3.ServiceType)
)

推荐阅读