我需要从数据库中选择只有一列具有特定值的所有行。也就是说,如果两行的“ABC”作为列arbitrary
的值,则不会返回它们。
我希望能够清楚地理解我所要求的内容。使用MySQL的DISTINCT
关键字对我需要做的事情是不可行的,因为使用它需要多次查询。我希望能够在一个漂亮,紧凑的查询中执行此操作,因为它将被频繁执行。我正在扩展我的应用程序以允许更高程度的并发性,而我现在的代码不会再削减它了。
目前,我正在使用DISTINCT
为相关列选择每个唯一值,然后检查另一个查询中的每个值以查看它们是否只存在一次。如果是这样的话,保留它,如果没有,扔掉它。当然有更谨慎的方法来解决这个问题?
感谢。
答案 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