查找映射到相同值的行

时间:2018-04-09 14:46:40

标签: sql oracle

我有一个带映射的表:

|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中有一种有效的方法吗?

4 个答案:

答案 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