2016-03-26 16 views
0
私は属性を持つテーブル、 テスト、持って

内に複数存在する場合:ID果物を。SQLグループを、そのグループ

我々は、次の言った表内のコンテンツがあります:1以上であった場合、私は、クエリの果物によってグループこれらの(別の1つの群ではりんご、バナナ)を希望

id, fruits 

1, Apple 
2, Banana 
3, Apple 

とリターンをそのグループ。

ので、上記の例のために、クエリが返す必要があります:

1, Apple 
3, Apple 

ここで私がこれまで持っているものです。

SELECT * 
FROM testing 
GROUP BY 'fruits' 
    HAVING COUNT(*) > 1 
ORDER BY 'id' 

このクエリだけりんごの1を返します。

ありがとうございました! Toby。

答えて

1

を。

SELECT * FROM testing 
WHERE fruits IN (
    SELECT fruits FROM testing 
    GROUP BY fruits HAVING COUNT(*)>1 
) 
ORDER BY id 

An SQLfiddle to test with

1

あなたが希望する結果を得るために戻ってテーブルに参加する必要があります:あなたが重複し、あなたの行を取得し、外側のクエリを見つけるために、サブクエリを使用することができます

SELECT t1.* 
    FROM testing AS t1 
    JOIN (
     SELECT fruits 
     FROM testing 
     GROUP BY fruits 
     HAVING COUNT(*) > 1 
    ) AS t2 ON t1.fruits = t2.fruits 
    ORDER BY t1.id 
2

実は、これを行うための最も効率的な方法は、existsを使用することが考えられます:

select t.* 
from testing t 
where exists (select 1 
       from testing t2 
       where t2.fruits = t.fruits and t2.id <> t.id 
      ); 

最適なパフォーマンスを得るために、あなたはtesting(fruits, id)にインデックスをしたいです。

+0

[私の質問](http://stackoverflow.com/questions/36246530/how-can-i-put-a-condition-on-the-way-of-join)をご覧ください。正直言って私はあなたの意見*を見るために質問しました。 – stack