2017-10-10 47 views
0

我有兩個表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 

如果我使用減去查詢我正在gettng輸出:

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


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

我想相同的輸出,而無需使用減號查詢。

+1

千萬不要'子EXISTS'查詢。 – jarlh

+0

我試過這個.ELECT名字,年齡從一個WHERE不存在(SELECT NAME,AGE FROM A2); – user8709290

+0

但我得到'沒有行' – user8709290

回答

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

+0

你使用0而不是null。 – jarlh

+0

哦,我明白了。感謝指出..讓我也處理null。 – zarruq

+0

那麼如果桌子上有新出生的嬰兒會發生什麼? (隨着年齡0) – jarlh

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)) 
+0

它也返回普通的一個也.ANU ---- – user8709290

+0

ANU不應該不來na – user8709290

+0

對,在這裏忘了NULL的...不要掛斷,將編輯 – jarlh