我需要一些帮助使此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;
答案 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);