2010-02-24 101 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的行