gpt4 book ai didi

mysql - 自连接一个表以创建 "AND-filter"的最简单方法?

转载 作者:行者123 更新时间:2023-11-29 01:57:01 24 4
gpt4 key购买 nike

我有以下(非常简单的)表格:

| A | Z |
|---|---|
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 2 | 1 |
| 2 | 5 |

现在我想按 Z 筛选此表中的值,并找到所有符合我筛选条件的 A。Z-Filter 的行为应该类似于 AND-filter。以下是一些匹配查询的示例:

-- filter z= 1
-- expect a = 1,2
select a from data where z = 1;

-- filter z= 5
-- expect a = 2
select a from data where z = 5;

-- filter z= -
-- expect a = 1,2
select a from data;

问题来了:我想按 z=1 AND z=5 过滤

-- filter z: 1,5
-- expect a = 2

使用“in”将不会给出我想要的结果。这就像说 z=1 OR z=5。

select a from data where z in (1,5);

我想要一个 AND 连接到 z-filter。我知道可以这样做:

select d1.a from data d1
left join data d2 on (d1.a = d2.a)
where d1.z = 1
and d2.z = 5;

问题是 z-filter-list 可以动态增长,对于每个 z-value,我都必须添加另一个连接。所以我的问题是:有更简单的方法吗?

SQLFiddle 上面的例子:http://sqlfiddle.com/#!2/03d07/4

最佳答案

您可以使用GROUP BY/HAVING:

SELECT  a
FROM data
WHERE z IN (1,5)
GROUP BY a
HAVING COUNT(DISTINCT z) = 2; -- NUMBER OF ITEMS IN THE IN CLAUSE

因此,尽管您说 z 可以是 1 或 5,但您的 HAVING 将其限制为仅具有两者的 a 值。

Example on SQL Fiddle

关于mysql - 自连接一个表以创建 "AND-filter"的最简单方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26011880/

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