如果我有这张桌子:
id | aux_id | name
------------------
1 | 22 | foo
2 | 22 | bar
3 | 19 | baz
如何获得结果,显示与至少一个其他记录共享aux_id
的名称?
name
----
foo
bar
我知道我需要使用GROUP BY
和/或HAVING
,但这不起作用:
SELECT name FROM my_table
GROUP BY aux_id
HAVING COUNT(aux_id) > 1
列“名称”在选择列表中无效,因为该列未包含在聚合函数或GROUP BY子句中。
答案 0 :(得分:3)
exists
怎么样?
select t.name
from my_table t
where exists (select 1
from my_table t2
where t2.aux_id = t.aux_id and t2.name <> t.name
);
答案 1 :(得分:2)
我会使用exists
:
select t.name
from table t
where exists (select 1 from table t1 where t1.aux_id = t.aux_id and t1.id <> t.id);
如果不使用group by
子句,可以覆盖所有列,这是一个优势。
答案 2 :(得分:1)
另一种选择,只是为了好玩...
scipy.spatial.Delaunay
答案 3 :(得分:1)
按作品归类,恕我直言(在大型数据中表现不佳,就像在EXISTS上那样):
select * from myTable
where aux_id in
(select aux_id
from myTable
group by aux_id
having count(*) > 1)