7

私のテーブル:

id attribute
1  2
1  2
2  3
2  4
5  1
5  1
6  3
6  3
6  5

属性がそれぞれで同じである場合、今、私は をid持つものだけを出力したい。attributeid

このサンプル テーブルでは、出力は次のようになります。

id attribute
1  2
5  1
4

3 に答える 3

8
SELECT id, MIN(attribute) AS attribute 
FROM test  
GROUP BY id
HAVING COUNT(DISTINCT attribute) = 1 ;

また:

SELECT id, MIN(attribute) AS attribute
FROM test 
GROUP BY id
HAVING MIN(attribute) = MAX(attribute) ;

最後のバージョンは、インデックスがオンになっていると非常に効率的であると予想されます(id, attribute)

于 2012-07-08T13:54:17.643 に答える
7

このアプローチを使用できます。

SELECT DISTINCT id, attribute 
FROM test t1 
WHERE (SELECT count(DISTINCT attribute) 
       FROM test t2 
       WHERE t2.id = t1.id) = 1

より良いアプローチは次のとおりです。

SELECT
   DISTINCT t1.id, t1.attribute
FROM
   test t1,
   (
      SELECT
         id,
         count(DISTINCT attribute) COUNT
      FROM
         test
      GROUP BY
         id
      HAVING
         COUNT = 1
   ) t2
WHERE
   t1.id = t2.id
于 2012-07-08T13:32:29.790 に答える
1

代わりに、次のアプローチを使用します。

     SELECT DISTINCT ta.id, ta.attribute
       FROM test ta
  LEFT JOIN test tb
         ON ta.id = tb.id AND ta.attribute <> tb.attribute
      WHERE tb.id IS NULL;

...私は通常、少なくともネストされたクエリを結合されたテーブルに置き換えようとする傾向があります。もちろん、テーブルが小さければ、それはそれほど重要ではありません。

于 2012-07-08T13:49:39.347 に答える