SQL查询内部联接丢失的数据

时间:2018-09-22 09:50:47

标签: sql sql-server

我需要一些帮助使此SQL查询正常工作

所有标签都列在“标签”表中,但是我的联接导致了这种麻烦。 请让我知道如何在同一查询中同时列出类型1(离散-无单位)和类型2(模拟与单位)。

这是当前结果:

wwTagKey TagName                        Description               TagType   Unit
---------------------------------------------------------------------------------
527      Æ0_0_02_VEN_MR6_02_Q.IO.HIL    High Limit Alarm Level    1         % rH
532      Æ0_0_02_VEN_MR6_02_Q.IO.LOL    Low Limit Alarm Level     1         % rH
547      Æ0_0_02_VEN_MR6_02_Q.IO.PV     Relative humidity         1         % rH
541      Æ0_0_02_VEN_MR6_03_Q.IO.HIL    High Limit Alarm Level    1         % rH

我需要所有TagType不存在的标签。 1包含在此结果中,但此类型(离散)不包含单位。

关于此EUKey(单元),则数据库不包含Unit和wwTagKey相关联的表,这就是为什么我加入了标记名的原因。

SELECT
    Tag.wwTagKey
    ,Tag.TagName
    ,Tag.Description
    ,Tag.TagType
    ,EngineeringUnit.Unit
FROM
    [Runtime].[dbo].[Tag]
INNER JOIN 
    [Runtime].[dbo].[AnalogTag] ON .AnalogTag.TagName = Tag.TagName
INNER JOIN 
    [Runtime].[dbo].[EngineeringUnit] ON AnalogTag.EUKey = EngineeringUnit.EUKey            
WHERE 
    TagType < 3;

2 个答案:

答案 0 :(得分:0)

您可以将查询分为两个并使用并集

SELECT wwTagKey, TagName, Description, TagType, e.Unit
FROM [Runtime].[dbo].[Tag]
INNER JOIN [Runtime].[dbo].[AnalogTag] a ON a.TagName = Tag.TagName
INNER JOIN [Runtime].[dbo].[EngineeringUnit] e ON a.EUKey = e.EUKey           
WHERE TagType = 2
UNION ALL
SELECT wwTagKey, TagName, Description, TagType, ‘’
FROM [Runtime].[dbo].[Tag]
WHERE TagType = 1;

或者,您可以使用左联接,但是在不知道数据的情况下,我无法告诉您是否需要用左联接替换第一个或第二个或两个内部联接。

答案 1 :(得分:0)

LEFT JOIN不会做什么吗?

SELECT t.wwTagKey, t.TagName, t.Description, t.TagType,
        eu.Unit
FROM [Runtime].[dbo].[Tag] t LEFT JOIN
     [Runtime].[dbo].[AnalogTag] ant
     ON ant.TagName = t.TagName LEFT JOIN 
     [Runtime].[dbo].[EngineeringUnit] eu
     ON ant.EUKey = au.EUKey            
WHERE t.TagType IN (1, 2);