在单个查询中从MySQL中选择唯一值

时间:2011-09-07 22:24:16

标签: mysql

我需要从数据库中选择只有一列具有特定值的所有行。也就是说,如果两行的“ABC”作为列arbitrary的值,则不会返回它们。

我希望能够清楚地理解我所要求的内容。使用MySQL的DISTINCT关键字对我需要做的事情是不可行的,因为使用它需要多次查询。我希望能够在一个漂亮,紧凑的查询中执行此操作,因为它将被频繁执行。我正在扩展我的应用程序以允许更高程度的并发性,而我现在的代码不会再削减它了。

目前,我正在使用DISTINCT为相关列选择每个唯一值,然后检查另一个查询中的每个值以查看它们是否只存在一次。如果是这样的话,保留它,如果没有,扔掉它。当然有更谨慎的方法来解决这个问题?

感谢。

2 个答案:

答案 0 :(得分:6)

SELECT * FROM table1 
GROUP BY the_column_that_must_be_unique
HAVING COUNT(*) = 1

要仅选择重复的值,然后只选择最新的值,这样我们就可以抛出这些值,让我们简单地调用the_column_that_must_be_unique u: - )

SELECT t1.* FROM table1 t1
INNER JOIN table1 t2 ON (t1.u = t2.u AND t1.id > t2.id)  

请注意,我假设id为自动递增的整数id,因此较大的id表示较新的项目。如果那不是真的

SELECT t1.* FROM table1 t1
INNER JOIN table1 t2 ON (t1.u = t2.u AND t1.id <> t2.id)
WHERE t1.atimestamp > t2.atimestamp  

答案 1 :(得分:1)

SELECT col1,col2,....
FROM table_name
GROUP BY arbitrary
HAVING COUNT( arbitrary) =1