我有两张桌子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查询输出相同的输出。
答案 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 强>