2010-02-24 3 views
1

J'ai le tableau suivant:SQL supprimer la ligne unique dans la table

PatientID | DiagID 

... où PatientID est un identifiant unique et DiagID est un ID de diagnostic, ce qui est unique. Comment puis-je supprimer le patient de la table qui a DiagID unique (le seul dans le tableau, qui a ce DiagID spécifique)?

Répondre

1

Vous voulez probablement supprimer tous les patients qui n'ont qu'une seule instance d'un ID de diagnostic. Dans ce cas le SQL serait quelque chose comme:

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

A supprimer la clause where ne pas utiliser la clé primaire, par exemple:

Delete From Table 
Where DiagID = 5 

Si vous voulez dire que vous voulez supprimer tous Uniques alors quelque chose comme:

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

Vous dites il n'y a qu'un seul patient avec ce diagnostic spécifique?

delete 
from YourTable 
where DiagID = @diagId 
0

Si vous savez qu'il est le seul alors il n'y a rien de mal à ce

DELETE FROM Patient 
WHERE DiagID = @inDiagID 

Si vous voulez être sûr, quelque chose comme cela pourrait être sage:

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 
0

Essayez-vous de supprimer les patients qui n'ont qu'un seul DiagID?

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

La sous-requête devrait lancer une erreur: pas d'agrégat sur DiagID. Fixer cela, et puis donné PatientID est toujours unique, alors COUNT (*) est toujours 1. TRUNCATE TABLE serait plus rapide. -1 – gbn

+0

oups ouais d'autres l'ont correct – ctrlShiftBryan

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

Le sous-requête trouver DiagIDs unique (c.-à-utilisés une fois). Ceci est utilisé pour JOIN bak pour supprimer des lignes pour ces DiagID uniques

Questions connexes