2

我有下表:

PatientID | DiagID

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

4

7 回答 7

2

大概您想删除任何只有一个诊断 ID 实例的患者。在这种情况下,SQL 将类似于:

DELETE Patient
WHERE DiagID in
(SELECT DiagID FROM Patient GROUP BY DiagID HAVING COUNT(*) = 1)
于 2010-02-24T18:47:38.517 回答
0

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

Delete From Table
Where DiagID = 5

如果您的意思是要删除所有唯一性,则类似于:

Delete From Table
Where DiagID In (Select DiagID
                 From Table
                 Group By DiagID
                 HAVING count(*) = 1)
于 2010-02-24T18:44:45.573 回答
0

你说只有一个病人有这个特定的诊断ID?

delete
from YourTable
where DiagID = @diagId
于 2010-02-24T18:45:09.333 回答
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
于 2010-02-24T18:45:43.643 回答
0

您是否要删除只有一个 DiagID 的患者?

DELETE FROM table
    WHERE PatientID IN 
    ( SELECT DiagID FROM table
    GROUP BY DiagID 
    HAVING COUNT(*) = 1)
于 2010-02-24T18:46:00.180 回答
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 的行

于 2010-02-24T18:46:32.280 回答
0

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

于 2021-06-03T15:41:40.690 回答