检查列是否有唯一值

时间:2012-07-08 13:24:12

标签: mysql sql

我的表:

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

现在我只希望用id输出attribute,如果每个id的属性相同。

在此示例表中,输出为

id attribute
1  2
5  1

3 个答案:

答案 0 :(得分: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)

的索引上非常有效

答案 1 :(得分: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

答案 2 :(得分: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;

...因为我通常倾向于至少尝试用连接表替换嵌套查询。当然,如果你的桌子很小,那就不重要了。