2

次の表があります。

PatientID | DiagID

...ここPatientIDで、は一意の識別子であり、DiagIDは一意ではない診断IDです。DiagID一意の患者(テーブル内で唯一、この特定の患者)をテーブルから削除するにはどうすればよいDiagIDですか?

4

7 に答える 7

2

おそらく、診断IDのインスタンスが1つしかない患者を削除したいとします。この場合、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を持つ患者は1人だけだとあなたは言いますか?

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が1つしかない患者を削除しようとしていますか?

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を検索します。これは、これらの一意のDiagIDの行を削除するためにbakに参加するために使用されます

于 2010-02-24T18:46:32.280 に答える
0

row_numberおよびoverpartitionbyおよびsortbyを使用して、一意でない診断IDであるレコードを判別し、where句を使用してそれらのレコードをフィルターに掛けることができます。このサブクエリを使用して、これらの行を削除できます。削除されている行を視覚的に確認したい。

于 2021-06-03T15:41:40.690 に答える