2011-05-18 52 views
1

HIII
我有兩個表刪除其它表查找後 - SQL

Invited

  • UID [PK]

Active

  • UID [pk]

我想從Invited誰是目前在Active表中刪除UID
我能做到這與加入或唯一的方法是使用NOT IN or IN

+3

我給你的建議是重新考慮你的架構。對於數據庫中的單個記錄,UID應該是唯一的,但是您有兩個表都具有與其主鍵相同的UID。通過這樣做你打敗了UID的目的。 – 2011-05-18 15:10:27

+1

@maple_shaft:每種情況下的UID實際上都可能是一個外鍵,它恰好也是主鍵。 – 2011-05-18 17:37:15

+0

是的,這仍然是錯誤的。人們使用UID的原因是唯一標識一個記錄,而不僅僅是模式,而是所有數據庫。這與僅在一個表格中唯一的ID不同。 (TableCar ID - 23 Name - Mercedes,TableDriver ID - 23 Name - Joe)這兩個表在ID上都是唯一的,兩者的值都是23,但它們代表不同的記錄。在具有相同模式的不同數據庫中的23的進一步ID仍將表示不同的記錄,即使在相同的表中。 – 2011-05-18 18:02:14

回答

4

是的,你可以使用IN

Delete From Invited where UID in (Select UID From Active)

或者你可以使用一個加入,如果你想

Delete i 
From Invited as i 
Join Active as a on i.UID = a.UID 
+0

plz看我的編輯! – Sourav 2011-05-18 15:09:56

+0

@Sourav:什麼編輯? – codingbadger 2011-05-18 15:12:06

2
DELETE FROM `Invited` WHERE Invited.UID IN (SELECT UID FROM `Active`) 

,或者對於性能改進:

DELETE i FROM `Invited` AS i WHERE EXISTS (SELECT 1 FROM `Active` WHERE Active.UID = i.UID)