2010-02-24 77 views
1

我有如下表:SQL刪除唯一行表

PatientID | DiagID 

...其中PatientID是一個唯一的標識符,DiagID是診斷ID,這是不是唯一的。我如何從表格中刪除患者,誰擁有獨特的DiagID(表中唯一的人,誰擁有這個具體的DiagID)?

回答

1

假定您想要刪除任何只有單個診斷ID實例的患者。在這種情況下,SQL將如下所示:

DELETE Patient 
WHERE DiagID in 
(SELECT DiagID FROM Patient GROUP BY DiagID HAVING COUNT(*) = 1) 
0

一個刪除where子句沒有使用主鍵,例如:

Delete From Table 
Where DiagID = 5 

如果你的意思是你要刪除所有不重複則是這樣的:

Delete From Table 
Where DiagID In (Select DiagID 
       From Table 
       Group By DiagID 
       HAVING count(*) = 1) 
0

你說只有一名患者具有此特定診斷ID?

delete 
from YourTable 
where DiagID = @diagId 
0

如果你知道它是唯一一個那麼有沒有錯

DELETE FROM Patient 
WHERE DiagID = @inDiagID 

如果你想成爲安全,這樣的事情也許是明智的:

IF NOT EXISTS(SELECT DiagID FROM Patient WHERE DiagID = @inDiagID GROUP BY DiagID HAVING COUNT(DiagID) = 1) 
BEGIN 
     DELETE FROM Patient 
     WHERE DiagID = @inDiagID 
END 
0

您是否嘗試刪除只有一個DiagID的患者?

DELETE FROM table 
    WHERE PatientID IN 
    (SELECT DiagID FROM table 
    GROUP BY DiagID 
    HAVING COUNT(*) = 1) 
+0

子查詢應該拋出一個錯誤:在DiagID上沒有聚合。解決這個問題,然後給定PatientID始終是唯一的,那麼COUNT(*)總是1. TRUNCATE TABLE會更快。 -1 – gbn 2010-02-24 18:51:55

+0

哎呀是的其他有它正確的 – ctrlShiftBryan 2010-02-24 19:58:03

0
DELETE 
    D 
FROM 
    DiagTable D 
    JOIN 
    (SELECT DiagID FROM DiagTable D2 GROUP BY DiagID HAVING COUNT(*) = 1) foo ON D.DiagID = foo.DiagID 

子查詢找到獨特的(即使用一次)DiagIDs。這用於JOIN bak刪除這些唯一DiagID的行