2016-03-08 67 views
1

查詢表A,使用第一次查詢後一些(不是全部)的記錄,我有這些記錄:使用第二查詢如何排除有相同的價值觀

pID cID code 
1  1  A 
1  1  B 
1  1  B 
1  1  B 

查詢表B之後,我有一個記錄:

pID cID code 
1  1  B 
1  1  B 

我想表一個排除表B.記錄的結果是:

pID cID code 
1  1  A 
1  1  A 

我怎樣才能做到這一點?希望你能幫助我。謝謝。
更新中...
對不起,例如讓你迷惑
如果我從第二表中的這些記錄:

pID cID code 
1  1  B 

那麼結果我想是(排除一個記錄) :

pID cID code 
1  1  A 
1  1  B 
1  1  B 
+0

添加您嘗試查詢 –

+0

請添加您query-- – Chanukya

+0

約'SELECT * FROM TABLEA工會SELECT * FROM tableB的是什麼;'? – Wanderer

回答

0

只要使用EXCEPT。如何過你想要的輸出是錯誤的,因爲1個1 B還從表B

SELECT * FROM TABLE_A 
EXCEPT 
SELECT * FROM TABLE_B 

請參閱本Link

如果你的情況不是所有,但有些則相同的記錄。

只要您可以使用DISTINCT

按有問題的更新(從我的理解)

SELECT DISTINCT * FROM TABLE_A 
UNION ALL 
SELECT * FROM TABLE_B 
+1

你提到「工會」,但你的查詢是使用「除」 – Squirrel

+0

對不起兄弟。謝謝@Squirrel –

+0

沒有問題。 。 – Squirrel

0

您嘗試GROUP BY功能在您的查詢 例如:

select pID,cID,code from table group by code 
0

使用EXCEPT和row_number()生成一個唯一的編號

;with cte1 as 
(
    select *, rn = row_number() over (partition by pID, cID, code order by pID, cID, code) 
    from query1 
), 
cte2 as 
(
    select *, rn = row_number() over (partition by pID, cID, code order by pID, cID, code) 
    from query2 
) 
select * 
from cte1 
except 
select * 
from cte2 
0

根據您的問題,我想你想刪除B的發生不止一次A中的記錄:

首先選擇從哪個是不存在B中的所有記錄,然後工會它們1條重複的記錄,其是否有在A和B兩種:

select * from A 
except 
select * from B 

union all 

select distinct * 
from 
    (select a.pid, a.cid, a.code 
    from 
    A 
    inner join 
    B 
    on a.pid=b.pid and a.cid=b.cid and a.code=b.code)