Обновить таблицу с условием - PullRequest
2 голосов
/ 26 сентября 2011

У меня следующая проблема:

У меня есть таблица:

TEST_TABLE
x_Id|y_Id
---------
   2|   7
   2|   8
   3|   7
   4|   7
   5|   8

Я хочу удалить запись, если x_Id имеет y_Id (7) и y_Id (8).И обновите y_Id до 7, если y_Id = 8 и y_Id (7) не существует в уникальном x_Id.

x_Id и y_Id - составной ключ.

Пример результата:

TEST_TABLE
x_Id|y_Id
---------
   2|   7
   3|   7
   4|   7
   5|   7

Ответы [ 2 ]

5 голосов
/ 26 сентября 2011

Удалите дубликаты (где для x_Id существуют оба y_Id 7 и 8) и обновите все оставшиеся y_Id, где y_Id = 8

DELETE FROM TEST_TABLE t1 WHERE y_Id=8 AND EXISTS (SELECT * FROM TEST_TABLE WHERE x_Id=t1.x_Id AND y_Id=7)
UPDATE TEST_TABLE SET y_Id=7 WHERE y_Id=8
1 голос
/ 26 сентября 2011

Эти запросы не используют связанные подзапросы (те, где они должны выполняться для каждой строки внешнего запроса), поэтому они должны быть достаточно эффективными.

delete from test_table
where y_id = 8
and x_id in (select x_id from test_table where y_Id = 7);

update test_table set y_id = 7
where x_id in (select x_id from test_table where y_id = 8)
and x_id not in (select x_id from test_table where y_id = 7);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...