如何在不使用减号的情况下进行列映射

时间:2017-10-10 06:19:29

标签: java sql

我有两张桌子A和A2。

TABLE A                      TABLE A2
-------------------   ------------------------------  
ID NAME     AGE           ID NAME      AGE
1  POOJA    18            1 POOJA      -
2  ANU      -             2 ANU        -
3  APPU      20           3 APPU       18

如果我使用减去查询,我会得到输出:

select name ,age from A MINUS select name,age from a2 ;


 name age 
------------------
    pooja 18
    appu 20

我希望不使用MINUS查询输出相同的输出。

2 个答案:

答案 0 :(得分:2)

使用NOT EXISTS从A中选择行,其中A2中没有匹配的行:

SELECT name ,age
from A
WHERE NOT EXISTS (SELECT 1 from A2
                  where a.NAME = a2.name and
                       (A.AGE = A2.Age
                        or coalesce(A.AGE, A2.Age) is null))

答案 1 :(得分:0)

如果您的rdbms(您未指定)支持NOT IN中的多个匹配条件,您还可以使用NOT IN,如下所示。

    SELECT a.NAME
    ,a.age
FROM tableA a
WHERE (
        a.NAME
        ,coalesce(a.age, 0)
        ) NOT IN (
        SELECT b.NAME
            ,coalesce(b.age, 0)
        FROM tableB b
        );

<强>结果:

NAME    AGE
---------------
POOJA   18
APPU    20

更新1:

如果需要处理age = 0,我们可以使用以下查询。

SELECT a.NAME
    ,a.age
FROM tableA a
WHERE (
        a.NAME
        ,coalesce(a.age, - 1)
        ) NOT IN (
        SELECT b.NAME
            ,coalesce(b.age, - 1)
        FROM tableB b
        ); 

<强> DEMO