如果它与另一行匹配,则选择单行
Selecting single row if it matches another
我有一个这样的场景:
在这种情况下,我只想 select 一行。我怎样才能做到这一点?
您可以将 distinct on
与 least()
和 greatest()
一起使用:
select distinct on (least(name1, name2), greatest(name1, name2)) t.*
from mytable t
order by least(name1, name2), greatest(name1, name2), name1
另一个选择是 not exists
:
select *
from mytable
where not exists (
select 1
from mytable t1
where t1.name1 = t.name2 and t1.name2 = t.name1 and t1.name1 < t1.name2
)
最后:如果所有行都是重复的,那么一个简单的where
条件就足够了:
select *
from mytable
where name1 < name2
我有一个这样的场景:
在这种情况下,我只想 select 一行。我怎样才能做到这一点?
您可以将 distinct on
与 least()
和 greatest()
一起使用:
select distinct on (least(name1, name2), greatest(name1, name2)) t.*
from mytable t
order by least(name1, name2), greatest(name1, name2), name1
另一个选择是 not exists
:
select *
from mytable
where not exists (
select 1
from mytable t1
where t1.name1 = t.name2 and t1.name2 = t.name1 and t1.name1 < t1.name2
)
最后:如果所有行都是重复的,那么一个简单的where
条件就足够了:
select *
from mytable
where name1 < name2