oracle sql查询在第3列匹配第1列和第2列中查找具有多个值的行

时间:2015-02-07 01:13:43

标签: sql oracle

我有一个大约有一百万行的数据集和Oracle 11 db。 我想找到col1和col2匹配但在col3中具有不同值的行。 我不知道如何做得好,虽然我当然可以编写一个似乎永远不会完成的查询:

select col1,col2,col3 
from table tab1 
where exists 
(select 1 
from table tab2 
where tab1.col1 = tab2.col1 
  and tab1.col2 = tab2.col2 
  and tab1.col3 != tab2.col3);

我跑了这个并且在一个小时后放弃了等待 - 我需要分析问题并将其呈现给一些人以确定如何继续前进。

非常感谢, 杰夫

2 个答案:

答案 0 :(得分:0)

你的意思是这样吗?

select col1,col2,col3 
from table tab1 
where col1 = col2
and col1 <> col3

答案 1 :(得分:0)

此类查询将指示col1, col2中具有相同col3的哪些行具有不同的值:

SELECT col1, col2
  FROM x
  GROUP BY col1, col2
  HAVING MIN(col3) <> MAX(col3)

要查看有多少col1, col2对受影响:

SELECT COUNT(*)
  FROM (SELECT col1, col2
          FROM x
          GROUP BY col1, col2
          HAVING MIN(col3) <> MAX(col3)
        )

您可能还想知道有多少重复项(即col1, col2, col3相同:

SELECT col1, col2, col3
  FROM x
  GROUP BY col1, col2, col3
  HAVING COUNT(*) > 1