SQL查询内部联接缺少数据
我需要一些帮助来让这个SQL查询正常工作 所有标记都列在表标记中,但我的联接导致了此问题。 请让我知道如何在同一查询中列出类型1(离散-无单位)和类型2(带单位的模拟) 这是当前的结果:SQL查询内部联接缺少数据,sql,sql-server,Sql,Sql Server,我需要一些帮助来让这个SQL查询正常工作 所有标记都列在表标记中,但我的联接导致了此问题。 请让我知道如何在同一查询中列出类型1(离散-无单位)和类型2(带单位的模拟) 这是当前的结果: wwTagKey TagName Description TagType Unit ---------------------------------------------------------------------------
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
no.1的标签包含在此结果中,但此类型(离散)不包含单位
关于这个EUKey(Unit),那么数据库不包含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;
选择
Tag.wwTagKey
,Tag.TagName
,Tag.Description
,Tag.TagType
,工程单位
从…起
[运行时].[dbo].[Tag]
内连接
.AnalogTag.TagName=Tag.TagName上的[Runtime].[dbo].[AnalogTag]
内连接
AnalogTag.EUKey=EngineeringUnit.EUKey上的[Runtime].[dbo].[EngineeringUnit]
哪里
TagType<3;
您可以将查询一分为二并使用union
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;
或者,您可以使用左联接,但在不知道数据的情况下,我无法确定是否需要用左联接替换第一个或第二个或两个内部联接。左联接不符合您的要求吗
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);
向问题中添加一些示例表数据和预期结果(以格式化文本而不是图像的形式)。提示:表别名非常方便。使查询更易于编写和读取。由于观察到的语法和dbo架构,因此标记为SQL Server。如果错误,请回滚。我认为通常应该使用数字键来连接表,而不是文本键。错误是什么?是否得到空结果集?与UNION相比,UNION ALL不会删除重复项。相应地使用