多行SQL where语句

多行SQL where语句,sql,Sql,这可能是一个简单的SQL语句,但现在我有一个“大脑冻结” 我有这张桌子 variant_id | filter_id 1585593211 4 1585593211 48 1585593212 4 1585593212 49 我需要获得具有过滤器id:4和48的变体id。在本例中,我希望得到1585593211这是一个“集合中的集合”查询 您可以尝试根据条件获取count,然后找到variant_idcount equal2 架构(MySQL v

这可能是一个简单的SQL语句,但现在我有一个“大脑冻结”

我有这张桌子

variant_id | filter_id
1585593211       4
1585593211       48
1585593212       4
1585593212       49
我需要获得具有过滤器id:4和48的变体id。在本例中,我希望得到1585593211

这是一个“集合中的集合”查询

您可以尝试根据条件获取
count
,然后找到
variant_id
count equal
2

架构(MySQL v5.6)


查询#1

SELECT variant_id
FROM T t1
where filter_id in (4,48)
group by variant_id
HAVING COUNT(*) = 2;

| variant_id |
| ---------- |
| 1585593211 |

这是一个“集合中的集合”查询

您可以尝试根据条件获取
count
,然后找到
variant_id
count equal
2

架构(MySQL v5.6)


查询#1

SELECT variant_id
FROM T t1
where filter_id in (4,48)
group by variant_id
HAVING COUNT(*) = 2;

| variant_id |
| ---------- |
| 1585593211 |


您可以在中使用
来获取所有具有
过滤器id的行
4
48
。然后,
按variant_id
分组,并检查在
HAVING
子句中,distinct
filter_id
s的计数是否等于2

SELECT variant_id
       FROM elbat
       WHERE filter_id IN (4, 48)
       GROUP BY variant_id
       HAVING count(DISTINCT filter_id) = 2;

您可以在
中使用
来获取所有具有
过滤器id的行
4
48
。然后,
按variant_id
分组,并检查在
HAVING
子句中,distinct
filter_id
s的计数是否等于2

SELECT variant_id
       FROM elbat
       WHERE filter_id IN (4, 48)
       GROUP BY variant_id
       HAVING count(DISTINCT filter_id) = 2;
group by,其中filter_id将过滤包含4和48的所有数据 对于特定的变量ID。 但是当我们添加
具有计数(不同的过滤器id)>1
这将确保过滤器id中同时存在4和48

group by,其中filter_id将过滤包含4和48的所有数据 对于特定的变量ID。 但是当我们添加
具有计数(不同的过滤器id)>1

这将确保过滤器id中同时存在4和48

请同时包含您的尝试。您正在使用哪些dbms?请同时包含您的尝试。您正在使用哪些dbms?这是唯一能正常工作的答案,因为它使用
DISTINCT
。可能是
=2
,这取决于实际问题是“必须只有4和48”还是“必须同时有4和48”。这是唯一正确的答案,因为它使用了
不同的
。可能是
=2
取决于实际问题是“必须只有4个和48个”还是“必须同时有4个和48个”,您需要
计数(不同*)
否则多个4s或48s将导致一行。虽然您的代码可能作为答案进行更正,但详细说明了代码的作用,但它可以提高答案的质量。签出文章:请解释你的代码,尽管这是不言自明的。。根据您的建议,您需要
count(distinct*)
否则多个4s或48s将导致一行。虽然您的代码可能作为答案进行更正,但详细说明了代码的作用,但它可以提高您答案的质量。签出文章:请解释你的代码,尽管这是不言自明的。。按照你的建议
SELECT variant_id
FROM TABLENAME where filter_id in (4,48) group by variant_id having count(distinct filter_id)>1;