0

を表示しようとしています'id''topic_id'ここで、'id'列 2 からの 2 つの特定の値が 1 つのテーブルに含まれている可能性があります。ただし、一部の ID には複数の値があります。

id    topic_id
1     red
2     blue
1     blue
4     purple

topic_id が赤と青の両方である ID を表示したい場合、クエリは何ですか?

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

結果セットは、赤と青の両方を持つ 1 ではなく、「1,2」です。

ありがとう!!!

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

赤青 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;
于 2012-11-10T00:24:35.533 に答える
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 に答える