0

我正在尝试在一个表中显示'id''topic_id'其中 an'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。

谢谢!!!

4

3 回答 3

2

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

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

请参阅带有演示的 SQL Fiddle

或者

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

请参阅带有演示的 SQL Fiddle

于 2012-11-10T00:29:44.687 回答
1

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

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

演示

于 2012-11-09T23:20:53.920 回答
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 (,)then 分隔:

   SELECT id, GROUP_CONCAT(topic_id separator ', ')
   FROM db
   WHERE topic_id in ('red', 'blue')
   GROUP BY id
   HAVING count(id) = 2;
于 2012-11-10T00:24:35.533 回答