首页 > 解决方案 > SqlServer - 搜索值列表是否完全包含在表中

问题描述

我有一个 sql 表和一个要搜索的值列表。

如果至少表的所有元素都包含在列表中,那么我必须返回 Ticket Id(这意味着我将更新此记录)。否则,我将返回 null(这意味着它将是一个新的注册)。

例如

在此处输入图像描述

用例:

值列表是带有列的预定义类型,在这种情况下,@ElementsToSearch 带有列值

SELECT T.Id
FROM 
    Ticket t
INNER JOIN 
    TicketValue TL ON TL.TicketId = T.Id
LEFT OUTER JOIN
    @ElementsToSearch ES ON ES.Value = TL.Value
WHERE
    ES.Value is null

谢谢你

标签: sqlsql-server

解决方案


无论您想返回什么,只需交换 null 和 1

declare @ElementsToSearch as Table(value varchar(10))
insert into @ElementsToSearch values('C1'),('C2'),('C3')


SELECT 
CASE WHEN (COUNT(CASE WHEN ES.value IS NULL then 1 end)>0) then NULL else T.id end as output
FROM 
    Ticket t
INNER JOIN 
    TicketValue TL ON TL.TicketId = T.Id
LEFT OUTER JOIN
    @ElementsToSearch ES ON ES.Value = TL.Value
    group by T.id



推荐阅读