gpt4 book ai didi

sql - 在 SQL 中返回包含 IN 子句中所有值的记录

转载 作者:行者123 更新时间:2023-12-04 21:09:01 25 4
gpt4 key购买 nike

如果标题不完全准确,我深表歉意,但我不确定如何准确表达我的问题。我只想返回结果包含 IN 语句中按特定列分组的所有项目的行。所以我的查询是:

    SELECT [DRSY],
[DRRT],
[DRKY],
[DRDL01]
FROM dbo.f0005
WHERE DRKY IN ('FC', 'OO', 'SH')

我想返回 DRSY 和 DRRT 包含所有项目“FC”、“OO”、“SH”的记录。也许一张图片可以帮助说明这一点:

Results where DRSY = 00 and DRRT = DT

我想要返回的唯一行是 DRSY = '00' 和 DRRT = 'DT',因为这包括我指定的所有 3 个值。我尝试寻找不同的方法来使用 IN、EXISTS,甚至 ALL。

最佳答案

我相信这可以通过 GROUPING 来完成,然后确保 DISTINCT 计数等于搜索项的数量:

   SELECT [DRSY],
[DRRT]
FROM dbo.f0005
WHERE DRKY IN ('FC', 'OO', 'SH')
GROUP BY [DRSY], [DRRT]
HAVING COUNT(DISTINCT DRKY) = 3;

编辑,重新确保项目计数保持同步

您可以做的是构建一个派生表或 CTE,其中包含所需值列表 (searchValues),然后您可以加入(而不是 IN)然后您将能够COUNT searchValues 以避免与计数值有关的任何维护问题。

WITH searchValues AS
(
select val
from (values ('FC'), ('OO'), ('SH')) as s(val)
)
SELECT [DRSY],
[DRRT]
FROM dbo.f0005
INNER JOIN searchValues s
ON DRKY = s.val
GROUP BY [DRSY], [DRRT]
HAVING COUNT(DISTINCT DRKY) = (SELECT COUNT(val) FROM searchValues);

SqlFiddle here

关于sql - 在 SQL 中返回包含 IN 子句中所有值的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31341776/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com