给出
------------------------------
|id | val1 | val2 | date |
______________________________
1 10 2 1990-10-02
2 10 3 1990-10-02
3 1 1 1990-10-02
4 21 1 1990-10-02
5 30 3 1990-10-02
6 30 1 1990-10-02
我想在结果中得到id为3和4的行,因为如果按val1分组,它们只有一个val1。
如何实现这一目标? SELECT DISTINCT COUNT(*)WHERE
答案 0 :(得分:2)
您可以使用group by
和having
:
select t.*
from t
group by val1
having count(*) = 1;
一般来说,我反对在select
中使用非聚合列进行聚合查询。但是,在这种情况下它很好,因为count(*)
保证只有一个匹配的行。
注意:这在其他数据库中不起作用。
答案 1 :(得分:1)
SELECT DISTINCT x.*
FROM my_table x
LEFT
JOIN my_table y
ON y.id <> x.id AND y.val1 = x.val2
WHERE y.id IS NULL;