sql - SqlServer - 搜索值列表是否完全包含在表中
问题描述
我有一个 sql 表和一个要搜索的值列表。
如果至少表的所有元素都包含在列表中,那么我必须返回 Ticket Id(这意味着我将更新此记录)。否则,我将返回 null(这意味着它将是一个新的注册)。
例如
用例:
- 如果我搜索以下元素:C1、C3、C6,这将是一个更新,我将获得 ticketid 1
- 如果我搜索以下元素:C8、C3、C6、C10,它将是一个创建,我将得到 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
谢谢你
解决方案
无论您想返回什么,只需交换 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
推荐阅读
- delphi - 为什么我不能在为它们分配动作后使用工具按钮?
- django - 如何使用 Apache 和 Daphne 部署 django 频道?
- composer-php - 无法在 Windows 10 的 xampp php 7.3.9 中安装作曲家
- php - 未显示完整日历的事件
- docker - Cloudwatch 仅记录部署更新
- python - 当 sudo 没有权限时读/写进程内存
- java - 来自自定义 LinearLayout 的子级不显示波纹效果
- javascript - JEST typeof 函数测试总是假的?
- swift - 可变参数究竟是如何工作的?
- c# - 即使使用 [BindProperty(SupportsGet = true)],Razor 页面也不会在 POST 上绑定属性