Sql удаление потерянных записей с составным первичным ключом - PullRequest
0 голосов
/ 23 апреля 2019

В таблице есть составной ключ с указанием источника и цели.

source    target
 1        2
 2        3
 2        4
 3       -1
 4       -1

Я хотел удалить записи с целевым значением -1, и источник не должен быть в цели. Чтобы добиться того же, я использую два разных запроса для удаления соответствующих записей.

Удалить отношения

Удаление записи (в вышеупомянутом образце) со значением 2 в источнике и цели приведет к пустая таблица.

Записи с -1 в качестве целевого значения и исходного значения не упоминаются ни в одной другой записи, затем считаются потерянными и удаляются.

Есть ли лучший способ удалить?

1 Ответ

1 голос
/ 23 апреля 2019

Это:

delete t
from tablename t
where
  t.target = -1
  and 
  t.source not in (
    select target from (
      select target from tablename t
    ) b
  )

удаляет все строки с target = 1, если source не включено ни в одну строку в столбце target.
См. Демоверсию .
Для этого образца данных:

| source | target |
| ------ | ------ |
| 1      |  2     |
| 2      |  3     |
| 3      |  4     |
| 3      | -1     |
| 4      | -1     |
| 5      | -1     |

будет удалена только последняя строка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...