次の表があります。
PatientID | DiagID
...ここPatientID
で、は一意の識別子であり、DiagID
は一意ではない診断IDです。DiagID
一意の患者(テーブル内で唯一、この特定の患者)をテーブルから削除するにはどうすればよいDiagID
ですか?
次の表があります。
PatientID | DiagID
...ここPatientID
で、は一意の識別子であり、DiagID
は一意ではない診断IDです。DiagID
一意の患者(テーブル内で唯一、この特定の患者)をテーブルから削除するにはどうすればよいDiagID
ですか?
おそらく、診断IDのインスタンスが1つしかない患者を削除したいとします。この場合、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を持つ患者は1人だけだとあなたは言いますか?
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が1つしかない患者を削除しようとしていますか?
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を検索します。これは、これらの一意のDiagIDの行を削除するためにbakに参加するために使用されます
row_numberおよびoverpartitionbyおよびsortbyを使用して、一意でない診断IDであるレコードを判別し、where句を使用してそれらのレコードをフィルターに掛けることができます。このサブクエリを使用して、これらの行を削除できます。削除されている行を視覚的に確認したい。