我有一个带映射的表:
|id|from|to|
|1 | 12 |AB|
|2 | 34 |CD|
|3 | 56 |AB|
|4 | 67 |EF|
|5 | 89 |CD|
|6 | 01 |GH|
|7 | 23 |CD|
如何查找映射到相同to
值的行?
因此理想情况下,查询会产生类似的结果:
|id|from|to|
|1 | 12 |AB|
|3 | 56 |AB|
|2 | 34 |CD|
|5 | 89 |CD|
|7 | 23 |CD|
在SQL中有一种有效的方法吗?
答案 0 :(得分:2)
您可以使用分析 content/post
函数来显示每行有多少行count()
值 。然后,您可以在外部查询中使用它来过滤掉计数为1的行。
这种方法的优点是基础数据只读取一次(而不是许多其他方法的两倍)。当然,这只有在执行时间很重要的情况下才有用 - 如果你有大量数据,和/或你必须经常运行这个查询。
to
答案 1 :(得分:1)
select *
from your_table
where "to" in (select "to" from your_table group by "to" having count(*) > 1)
order by "to"
答案 2 :(得分:1)
You can also do this with exists
:
select t.*
from t
where exists (select 1 from t t2 where t2.to = t.to and t2.id <> t.id);
I offer this because under some circumstances (particularly with an index on (to, id)
, this may be the fastest approach.
答案 3 :(得分:-4)
select * from table_name order by to,from