Mar*_* Ba 2 sql oracle query-optimization
我有一个这样的表(基本的例子,不是真实的东西):
FKEY | NAME | ATTRIBUTE_X
--------------------------
1 '...' 42
1 '...' 42
1 '...' 42
2 '...' 7
2 '...' 7
5 '...' 42
5 '...' 42
5 '...' 42
5 '...' 42
6 '...' 300
6 '...' 300
....
Run Code Online (Sandbox Code Playgroud)
其中 - 通常 - 给定fkey的每个attribute_x值都相同.(在我的实际数据中,我从表中的某些列计算attribute_x,并且对于具有相同fkey的所有行,此属性必须相同.
现在我有一些行没有这个属性.我想搜索整个表以查找具有不匹配的attribute_x值的所有FKEY.
例:
--------------------------
145678973 '...' 23
145678973 '...' 22 // Error, should also be 23
145678973 '...' 23
Run Code Online (Sandbox Code Playgroud)
我天真的做法是:
SELECT distinct(TX1.FKEY)
FROM TABLEX TX1, TABLEX TX2
WHERE TX1.FKEY=TX2.FKEY
AND TX1.ATTRIBUTE_X <> TX2.ATTRIBUTE_X
;
Run Code Online (Sandbox Code Playgroud)
但是由于我的真实数据没有完成(我运行了临时表空间,在DBA将临时表空间增加到20 GIG之后,查询运行了几个小时然后被保释.)
通常,是否有更有效的查询?
我有一个PL/SQL的解决方案,我只是循环遍历由FKEY排序的表,如果我找到一个不同的attribute_x与fkey保持不变的最后一个读取记录,我发现了一个错误的fkey.
但这似乎是如此原始:-)是否有一个高效的纯SQL解决方案?
小智 9
最简单的方法:
select fkey
from tablex
group by fkey
having count(distinct attribute_x) > 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
984 次 |
| 最近记录: |