Как обновить, если строка существует в другой таблице (SQL) - PullRequest
0 голосов
/ 28 мая 2019

Я пытаюсь обновить столбец в itemTable, если в коррелированной таблице существует строка с совпадающим iid.

itemMeta - это таблица стилей NoSQL с дубликатом iids на элемент таблицы, а itemTable - реляционная таблица.

update itemTable it
set hasAttributes = (select
  case when select count(1) from itemMeta where (im.iid = it.iid) 
  then 'Y' 
  else 'N' end)
from itemMeta im
where (im.iid = it.iid)

Как установить для столбца значение Y в itemTable, если существует строка с совпадающим iid вitemMeta

1 Ответ

4 голосов
/ 28 мая 2019

Это будет работать в большинстве баз данных, включая SQL Server:

update itemTable
    set hasAttributes = (case when exists (select 1
                                           from itemMeta im
                                           where im.iid = itemTable.iid
                                          ) 
                              then 'Y' else 'N'
                         end);

Если вы просто хотите обновить значение до 'Y', если оно существует (и оставить существующее значение, если оно есть), тогдаЯ бы порекомендовал:

update itemTable
    set hasAttributes = 'Y'
    where exists (select 1
                  from itemMeta im
                  where im.iid = itemTable.iid
                 );

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

И, если вы заботитесь о производительности, вам нужен индекс на itemMeta(iid).

...