从表中获取行,其中第一列的值相同,而第二列的值不同

时间:2019-07-02 19:03:18

标签: sql oracle self-join

Table1

我需要找到col2具有相同值但col3具有不同值的所有行。从上表中,它应该返回Pk1,Pk3和Pk4。我尝试了以下自我加入,但看到重复的记录。

 SELECT  T1.COL1,T1.COL2,T1.COl3
    FROM Tab T1, Tab T2
        WHERE T1.Col2=T2.Col1 
        AND T1.Col3 <> T2.Col3 

;

3 个答案:

答案 0 :(得分:0)

我会使用exists

select t.*
from t
where exists (select 1 from t t2 where t2.col2 = t.col2 and t2.col3 <> t.col3);

答案 1 :(得分:0)

解析函数更适合此类工作-避免所有联接。例如:

select col1, col2, col3
from   (
         select t.*, 
                case when min(col3) over (partition by col2) != 
                          max(col3) over (partition by col2) then 0 end as flag
         from   tab t
       )
where  flag = 0;

尚不清楚您要如何处理null中的col3-这算作“不同”值吗?如果您多次拥有null(对于col2中的相同值怎么办?另外-如果col2可以是null怎么办?

答案 2 :(得分:0)

尝试一下:

SELECT COL1,COL2,COL3 FROM
(SELECT COL1,COL2,COL3, COUNT(DISTINCT COL3) OVER (PARTITION BY COL2) CNT
FROM TEST)
WHERE CNT > 1

db<>fiddle demo

干杯!