SQL中有UNION
和UNION ALL
運算符。第一個刪除所有重複,第二個不重複。我想只刪除源自不同子查詢的重複項,但保留來自同一個子項的重複項。例如:Semi-distinct union
TABLE t1: TABLE t2: TABLE t3:
a | b a | b a | b
————— ————— —————
1 | 2 1 | 2 1 | 3
1 | 2 1 | 3
我想(SELECT * FROM t1) UNION SEMI (SELECT * FROM t3)
返回所有四行,
然後(SELECT * FROM t2) UNION SEMI (SELECT * FROM t2)
返回一行。
我真的不在乎什麼
(SELECT * FROM t1) UNION SEMI (SELECT * FROM t2)
會返回,但它會很好,如果以某種方式依賴於子查詢的順序,例如, G。在最後一個例子中,它將是兩行,並且反過來(t2 UNION t1
) - 一個。
我可以做一個巨大的查詢,但問題是 - 是否有這樣的操作的標準方法?
在此先感謝。
不,我不認爲有一個內置的操作這一點。我認爲這是一個非常不尋常的要求。什麼是用例? – Barmar
@Barmar粗略地說,我有兩個表A和B.有時來自A的條目被複制到B,有時被移動。我需要了解一開始在表A中有多少條記錄。我將兩個表格清楚地結合在一起,因此一張表格中的相似行會丟失,這並不酷。有這樣的業務邏輯,要麼沒有相同的行被複制到B或一次全部。所以,如果N個相似的行還沒有被複制,或者已經被複制,或者已經被移動,我需要'union'來返回數字N.當然,我只能在該項目中選擇。 –
所以你想要聯合表1與表2中的所有行不匹配表1中的任何內容。 – Barmar