我有下表:
PatientID | DiagID
...其中PatientID
是唯一标识符,DiagID
是诊断 ID,不是唯一的。如何从唯一的表中删除患者(表中唯一DiagID
的,谁有这个特定的DiagID
)?
我有下表:
PatientID | DiagID
...其中PatientID
是唯一标识符,DiagID
是诊断 ID,不是唯一的。如何从唯一的表中删除患者(表中唯一DiagID
的,谁有这个特定的DiagID
)?
大概您想删除任何只有一个诊断 ID 实例的患者。在这种情况下,SQL 将类似于:
DELETE Patient
WHERE DiagID in
(SELECT DiagID FROM Patient GROUP BY DiagID HAVING COUNT(*) = 1)
删除 where 子句不必使用主键,例如:
Delete From Table
Where DiagID = 5
如果您的意思是要删除所有唯一性,则类似于:
Delete From Table
Where DiagID In (Select DiagID
From Table
Group By DiagID
HAVING count(*) = 1)
你说只有一个病人有这个特定的诊断ID?
delete
from YourTable
where DiagID = @diagId
如果您知道它是唯一的,那么这没有任何问题
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
您是否要删除只有一个 DiagID 的患者?
DELETE FROM table
WHERE PatientID IN
( SELECT DiagID FROM table
GROUP BY DiagID
HAVING COUNT(*) = 1)
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 的行
您可以使用 row_number 和 over partition by 和 sort by 来确定哪些记录是非唯一的诊断 ID,然后使用 where 子句过滤这些记录。使用此子查询,您可以删除这些行。我喜欢直观地确认正在被删除的行。