2014-07-03 17 views
0

我有一個表Table1Table2這樣的:查找匹配的記錄使用內部連接,而無需使用WHERE子句

表1

Col1 
==== 
A 
B 

表2

Col1 
==== 
A 
B 
C 
D 

現在使用INNER JOIN我需要找到不匹配的從Table2

ED記錄(注:WHERE子句NOT ALLOWED

預期輸出:

Col1 
==== 
C 
D 

什麼可以的SQL查詢嗎?

我已經嘗試了下面的不工作。

Select Distinct 
    Table2.col1 
from 
    Table1 
Inner Join 
    Table2 On Table1.col1 <> Table2.col1 
+1

可以使用EXCEPT? – cha

+0

我發佈了一個答案,使用RIGHT JOIN,沒有WHERE子句。我看不到INNER JOIN如何讓你找到無與倫比的記錄;重點是找到平等。 – VBlades

回答

0

第一次跳過槍 - 本應該正確讀取,對不起。不得不思考這樣一個:

SELECT  Table2.col1 
FROM  Table1 RIGHT JOIN Table2 
      ON Table1.col1 = Table2.col1 
GROUP BY Table1.col1, Table2.col1 
HAVING  Table1.col1 IS NULL; 
+0

是允許的條款嗎? –

0

您可以使用下面的查詢

SELECT * FROM Table2 
WHERE Col1 NOT IN 
    (SELECT Col1 FROM Table1) 

下面的查詢也適用

SELECT Col1 FROM Table2 
    EXCEPT 
    SELECT Col1 FROM Table1 
0

沒有人說這必須是明智的是吧?

with 
t1 as (
     select col1 as c1 
      , row_number() over (order by col1 ASC) as rn1 
     from table1 
    ), 
t2 as (
     select col1 as c2 
      , row_number() over (order by col1 DESC) as rn2 
     from table2 
    ) 
select 
    c2 as Col1 
from t2 
inner join t1 on t2.rn2 = t1.rn1 and t2.c2 <> t1.c1 
order by c2 ASC 
; 

http://sqlfiddle.com/#!15/4747e/1(Postgres的9.3.1)

+0

非常有創意!我立場糾正。大聲笑。 – VBlades

相關問題