gpt4 book ai didi

SQL 当属性至少匹配一个值列表时选择一个组

转载 作者:行者123 更新时间:2023-12-04 14:40:46 24 4
gpt4 key购买 nike

给定一个带有(非唯一的)标识符和值的表:

| ID | Value |
|----|-------|
| 1 | A |
| 1 | B |
| 1 | C |
| 1 | D |
| 2 | A |
| 2 | B |
| 2 | C |
| 3 | A |
| 3 | B |

如何选择具有给定列表值的分组标识符?(例如 ('B', 'C'))

此列表也可能是另一个查询的结果(例如 SELECT Value from Table1 WHERE ID = '2' 以查找具有值超集的所有 ID,与 ID=2 相比(仅本例中 ID=1))

结果

| ID |
|----|
| 1 |
| 2 |

12 是结果的一部分,因为它们同时具有 A B 在它们的 Value 列中。 3 不包括在内,因为它缺少 C

感谢这个问题的回答:SQL Select only rows where exact multiple relationships exist我创建了一个适用于固定列表的查询。但是我需要能够在不更改查询的情况下使用另一个查询的结果。 (并且还需要特定于 Access 的 IFF 函数):

SELECT ID FROM Table1
GROUP BY ID
HAVING SUM(Value NOT IN ('A', 'B')) = 0
AND SUM(IIF(Value='A', 1, 0)) = 1
AND SUM(IIF(Value='B', 1, 0)) = 1

以防万一:SQL 通过 VBA 和 ADODB 在 Excel 表上运行。

最佳答案

在您希望查看的值列表的 where 条件过滤器中,按 id 分组,并在具有 3 个匹配行的那些 id 的 having 子句过滤器中。

select id from table1
where value in ('A', 'B', 'C') --you can use a result of another query here
group by id
having count(*)=3

如果您可以多次拥有相同的 id - 值对,那么您需要稍微更改 having 子句:having count(distinct value)=3

如果你想让它完全基于子查询动态化,那么:

select id, min(valcount) as minvalcount from table1
cross join (select count(*) as valcount from table1 where id=2) as t1
where value in (select value from table1 where id=2) --you can use a result of another query here
group by id
having count(*)=minvalcount

关于SQL 当属性至少匹配一个值列表时选择一个组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36764572/

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