比较两个表中各个列的匹配值,并确定缺少的记录

时间:2019-11-06 10:40:08

标签: sql sql-server join sql-server-2016 sqlcommand

我有两个表和数据,如下所示:

我想比较两个表的“类型和匹配类型”列,并确定匹配类型中缺少类型的第一个表的ID。如果我们可以使用join,那么“ Type”和“ MatchType”是两个表中唯一的公共列。例如,第二行的FirstTable列值与SecondTable的第二行匹配,比较应像FirstTable始终有数字,第二张表在相同数字之前有2个字符,因此我们应该忽略字符并仅检查数字,如果两者匹配,然后从第一个表中忽略该ID。在下面的本例示例数据中,我的输出应具有FirstTable的ID 1和3,因为这两个记录的“类型”均为NULL或在SecondTable中不存在。

CREATE TABLE [dbo].[FirstTable](
    [Id] [int] NOT NULL,
    [Name] [varchar](50) NULL,
    [Type] [varchar](50) NULL
)

CREATE TABLE [dbo].[SecondTable](
    [ID] [int] NULL,
    [Relation] [varchar](50) NULL,
    [MatchType] [nvarchar](50) NULL
)

Id  Name    Type
1   Bam     1234
2   Prish   3433
3   Tomato  4545


ID  Relation    MatchType
1   Sister     NULL
2   Mother     PS3433
3   Nomad      NULL
4   Nothing    PS4322

预期结果

ID(从第一张表开始,因为第二张表的MatchType中不存在相应的ID类型-请记住删除第二张表的MatchType值前面的2个字符,然后比较数字)

1
3

我尝试使用PATINDEX,但似乎不起作用,或者我做错了事。

1 个答案:

答案 0 :(得分:1)

尝试一下

SELECT F.* 
FROM FirstTable F LEFT JOIN (SELECT RIGHT(MatchType,LEN(MatchType)-2) MT FROM SecondTable) S ON F.Type = S.MT  
WHERE S.MT IS NULL

FIDDLE DEMO