2015-06-15 33 views
0

其實我有兩個表,每個有列名,我只是想其結果是不存在表2中獲得無與倫比的記錄,而不使用Oracle減去除了不

Table1 
---- 
Name 
--- 
|A| 
|B| 
|C| 
|D| 


Table2 
------ 
|Name| 
----- 
|A| 
|B| 

答案 | C | | D |

我能做到這一點,通過使用減

select name from table1 
minus 
select name from table2 

select name from table1 where name 
    not in (
    select name from table2) 

但我的經理問我與其他替代解決方案做到這一點,而無需使用減,除,不中。 有沒有辦法做到這一點,如果有人能幫助我,這將是一件好事。 我需要與Oracle PL/SQL留下您

+0

你是說你不能使用「NOT IN」嗎?似乎是經理人的一個奇怪的要求。這是MINUS和NOT IN創建的類型。 – davegreen100

回答

2

的一個選項來執行它使用NOT EXISTS

SELECT t1.name 
    FROM table1 t1 
WHERE NOT EXISTS (SELECT 'X' 
        FROM table2 t2 
        WHERE t2.name = t1.name); 

更新:使用加入

with table_ as 
(
    select t1.name t1_name, t2.name t2_name 
    from table1 t1 
    left join table2 t2 
     on t1.name = t2.name) 
select t1_name 
    from table_ 
where t2_name is null; 

或者只是

select t1.name 
    from table1 t1 
    left join table2 t2 
    on t1.name = t2.name 
where t2.name is null; 
+0

是否有可能加入,只是問我會對我很好 –

+0

通過加入更新了答案。 – San

+0

感謝加入我工作正常,我正在尋找這個解決方案 –

2

另一種選擇是使用外部聯接,然後篩選沒有val的行ue在第二個表格中:

with t1 as (select 'A' name from dual union all 
      select 'B' name from dual union all 
      select 'C' name from dual union all 
      select 'D' name from dual), 
    t2 as (select 'A' name from dual union all 
      select 'B' name from dual) 
select t1.name 
from t1 
     left outer join t2 on (t1.name = t2.name) 
where t2.name is null; 

NAME 
---- 
D 
C 
+0

對不起,骨科醫生,我已經在你1分鐘後回答了同樣的解決方案。現在我繼續刪除我的答案,併爲您的答案投票。 – acesargl

+0

是的,我一直在尋找它的工作非常感謝 –