INNER JOIN在具有多个匹配的多个列上

时间:2017-05-30 13:56:58

标签: oracle

如何在INNER JOIN中找到哪些行完全匹配以及哪些行有多个匹配?

SELECT A.Col1, B.Col2 FROM A INNER JOIN B
ON A.Col3 = B.Col3 AND A.Col4 = B.Col4;

正如我们所知INNER JOIN返回的行最少匹配一次,所以再次重申我的qustion,如何找到哪些行匹配一次以及哪些行有多个匹配。

此致 萨钦

2 个答案:

答案 0 :(得分:1)

您可以使用窗口函数来计算来自B的记录数:

SELECT A.Col1, B.Col2, Count(*) OVER (PARTITION BY b.col3, b.col4) as bcount
FROM A 
    INNER JOIN B
        ON A.Col3 = B.Col3 AND A.Col4 = B.Col4;

答案 1 :(得分:0)

在JNevill的输入的帮助下,这是我正在寻找的一个工作示例。我想再次感谢JNevill。

    create table A (col1 number, col3 number, col4 number, col5 number, col6 number);
    create table B (col2 number, col3 number, col4 number, col5 number, col6 number);

    insert into A values (1,2,3, 4, 5);
    insert into A values (2,3,4,5,6);
    insert into B values (3,4,5,6,7);
    insert into B values (4,2,3,4,5);
    insert into B values (5,2,3,8,9);
    insert into B values (6,3,4,5,6);
    insert into B values (7,3,4,5,6);

    SELECT Col1 FROM(
SELECT A.Col1,B.Col2, A.Col3, A.Col4, A.Col5 ,A.Col6, Count(*) OVER (PARTITION BY B.col3, B.col4, B.col5, B.col6) as bcount
FROM A 
INNER JOIN B
ON A.Col3 = B.Col3 AND A.Col4 = B.Col4 AND A.Col5 = B.Col5 AND A.Col6 = B.Col6) WHERE BCOUNT = 1;

所以,我正在寻找表A中的一列,它与表B中的所有连接列完全匹配。

问候。