SQL查询内部联接缺少数据

SQL查询内部联接缺少数据,sql,sql-server,Sql,Sql Server,我需要一些帮助来让这个SQL查询正常工作 所有标记都列在表标记中,但我的联接导致了此问题。 请让我知道如何在同一查询中列出类型1(离散-无单位)和类型2(带单位的模拟) 这是当前的结果: wwTagKey TagName Description TagType Unit ---------------------------------------------------------------------------

我需要一些帮助来让这个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
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不会删除重复项。相应地使用