SQL удалить уникальную строку в таблице - PullRequest
1 голос
/ 24 февраля 2010

У меня есть следующая таблица:

PatientID | DiagID

... где PatientID - уникальный идентификатор, а DiagID - идентификатор диагностики, который не является уникальным. Как удалить из таблицы пациента, у которого есть уникальный DiagID (единственный в таблице, у которого есть этот конкретный DiagID)?

Ответы [ 6 ]

1 голос
/ 24 февраля 2010

Предположительно, вы хотите удалить всех пациентов, у которых только один экземпляр идентификатора диагноза В этом случае SQL будет выглядеть примерно так:

DELETE Patient
WHERE DiagID in
(SELECT DiagID FROM Patient GROUP BY DiagID HAVING COUNT(*) = 1)
0 голосов
/ 24 февраля 2010
DELETE
    D
FROM
    DiagTable D
    JOIN
    (SELECT DiagID FROM DiagTable D2 GROUP BY DiagID HAVING COUNT(*) = 1) foo ON D.DiagID = foo.DiagID

Подзапрос находит уникальные (то есть использованные один раз) DiagID. Это используется, чтобы ПРИСОЕДИНИТЬСЯ к bak, чтобы удалить строки для этих уникальных DiagID

0 голосов
/ 24 февраля 2010

Вы пытаетесь удалить пациентов, которые имеют только один DiagID?

DELETE FROM table
    WHERE PatientID IN 
    ( SELECT DiagID FROM table
    GROUP BY DiagID 
    HAVING COUNT(*) = 1)
0 голосов
/ 24 февраля 2010

Если вы знаете, что это единственный, то в этом нет ничего плохого

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
0 голосов
/ 24 февраля 2010

Вы говорите, что есть только один пациент с этим специфическим диагнозом?

delete
from YourTable
where DiagID = @diagId
0 голосов
/ 24 февраля 2010

В предложении delete where не нужно использовать первичный ключ, например:

Delete From Table
Where DiagID = 5

Если вы хотите удалить все уникальные записи, то что-то вроде:

Delete From Table
Where DiagID In (Select DiagID
                 From Table
                 Group By DiagID
                 HAVING count(*) = 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...