SQL删除表中的唯一行

时间:2010-02-24 18:41:45

标签: tsql delete-row

我有下表:

PatientID | DiagID

...其中PatientID是唯一标识符,DiagID是诊断ID,不是唯一的。如何从表中删除具有唯一DiagID的患者(表中唯一的患者,具有此特定DiagID)?

7 个答案:

答案 0 :(得分:1)

据推测,您希望删除任何只有一个诊断ID实例的患者。在这种情况下,SQL将类似于:

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

答案 1 :(得分:0)

delete where子句不必使用主键,例如:

Delete From Table
Where DiagID = 5

如果您的意思是要删除所有唯一身份用户,请执行以下操作:

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

答案 2 :(得分:0)

您说只有一名患者具有此特定诊断ID吗?

delete
from YourTable
where DiagID = @diagId

答案 3 :(得分: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

答案 4 :(得分:0)

您是否正在尝试删除只有一个DiagID的患者?

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

答案 5 :(得分:0)

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

子查询找到唯一(即使用过一次)DiagID。这用于JOIN bak删除这些唯一DiagID的行

答案 6 :(得分:0)

您可以使用 row_number 和 over partition by 和 sort by 来确定哪些记录是非唯一的诊断 ID,然后使用 where 子句过滤这些记录。使用此子查询,您可以删除这些行。我喜欢直观地确认被删除的行。