从第1列中提取ID,其中第2列具有多个值

时间:2012-11-09 23:17:33

标签: mysql

我正在尝试在一个表格中显示'id''topic_id',其中'id'可能有第二列的两个特定值。 但是,有些id有多个值。

id    topic_id
1     red
2     blue
1     blue
4     purple

如果我想显示id,其中topic_id是红色和蓝色,查询是什么?

select id, topic_id
from db
where topic_id='red, blue';

结果集是“1,2”而不是1,它有红色和蓝色。

感谢!!!

3 个答案:

答案 0 :(得分:2)

我相信这是您想要的查询:

select id
from yourtable
where topic_id in ('blue', 'red')
group by id
having count(distinct topic_id) > 1

请参阅SQL Fiddle with Demo

select id
from yourtable
where topic_id in ('blue', 'red')
group by id
having count(distinct topic_id) = 2

请参阅SQL Fiddle with Demo

答案 1 :(得分:1)

您可以使用以下查询。嵌套的SELECT查询将返回所有具有topic_id“blue”的ID。然后它将查看ID列表,如果其中任何一个也有一个'red'的topic_id,那么它们将在结果集中返回。

SELECT id
FROM table1
WHERE id IN (SELECT id FROM table1 WHERE topic_id ='blue')
AND topic_id = 'red';  

DEMO

答案 2 :(得分:1)

您是否正在寻找1个红色蓝色,2个蓝色,4个紫色的结果,即如果多个主题ID连接它们?如果是,请尝试使用GROUP_CONCAT功能,如下所示:

   SELECT id, GROUP_CONCAT(topic_id separator ' ')
   FROM db
   WHERE topic_id in ('red', 'blue')
   GROUP BY id
   HAVING count(id) = 2;

如果您希望主题Id值由comma (,)分隔,则:

   SELECT id, GROUP_CONCAT(topic_id separator ', ')
   FROM db
   WHERE topic_id in ('red', 'blue')
   GROUP BY id
   HAVING count(id) = 2;