mysql filter column results

a14dhokn  于 2023-04-05  发布在  Mysql
关注(0)|答案(2)|浏览(124)

我有以下数据。
| ID|标题|
| --------------|--------------|
| 一百|蓝色|
| 一百|黑色|
| 一百|橙子|
| 一百零一|褐色|
| 一百零一|绿色|
| 一百零二|绿色|
| 一百零二|白色|
| 一百零二|黄色|
| 一百零三|黄色|
| 一百零三|蓝色|
| | |
预期结果:如果我选择蓝色,我想得到100和103。如果选择蓝色和黄色只返回103。如果我选择蓝色黄色和白色,不应该返回结果。基本上我只想得到匹配所有选定颜色的PID列。
注意:IN SQL语句只会给予我包含语句中提到的任何颜色的PID。我需要满足上面解释的标准。让我有你的想法。我对所有建议都持开放态度,即使解决方案将涉及初始结果的sql查询组合,然后根据需要过滤JSON对象
我已经尝试在WHERE predicate 子句中使用IN,但这只能给我与语句中的任何颜色匹配的PID

beq87vna

beq87vna1#

SELECT ID, COUNT(DISTINCT heade) AS num_colours
FROM mytable
WHERE heade IN ('blue', 'white')
GROUP BY ID
HAVING num_colours = 2
i7uq4tfw

i7uq4tfw2#

这可以概括为:

SELECT ID
FROM your_table
WHERE heade IN ('Color1', 'Colo2', 'Color3'......'Colorn')
GROUP BY ID
HAVING COUNT(DISTINCT heade) = n;

你可以传递确切的颜色和它们的计数为'n'。这里是一个DBFILLDLE demo
当您传递三种颜色时:

SELECT ID
FROM your_table
WHERE heade IN ('blue', 'yellow', 'white')
GROUP BY ID
HAVING COUNT(DISTINCT heade) = 3;

输出:空。
传递两种颜色时:

SELECT ID
FROM your_table
WHERE heade IN ('blue', 'yellow')
GROUP BY ID
HAVING COUNT(DISTINCT heade) = 2;

输出:

ID
103

传递单色时:

SELECT ID
FROM your_table
WHERE heade IN ('blue')
GROUP BY ID
HAVING COUNT(DISTINCT heade) = 1;

输出:

ID
100
103

相关问题