2014-10-30 5 views
0

Table1 столбцов: идентификатор, имяЧтобы обновить table1 с учетом данных table2

Table2 столбцов: идентификатор, статус.

Как сделать запрос, что update Table1.name для Table1.id = 'some_id', если Table2.id = Table1.id и Table2.status = 'some_status'?

Заранее спасибо.

+0

Зачем вам это нужно в отдельной таблице? Работает ли у вас одна таблица с столбцами «id, name, status»? – carlosherrera

+0

Структура таблиц не может быть изменена. – slider

+1

Отметьте это [вопрос] (http://stackoverflow.com/questions/224732/sql-update-from-one-table-to-another-based-on-a-id-match). – programmer43229

ответ

1
update Table1 set Table1.name = 'XXX' 
where Table1.id = 'some_id' 
    and exists (select 1 from Table2 where Table2.id = Table1.id and Table2.status = 'some_status'); 

EXISTS испытания ключевых слов для существования каких-либо строк в подзапроса. Если строки не найдены, ответ будет FALSE. В противном случае подзапрос возвращает TRUE. NOT EXISTS отменяет результаты.

Обратите внимание, что весь подзапрос выполняется, даже если СУЩЕСТВУЕТ нужно только знать, возвращает ли не подзапрос какие-либо строки - так остерегайтесь с помощью EXISTS с подзапросов, которые возвращают большое количество строк.

Следует отметить, что такого рода запрос иногда называют «semijoin». Semijoin - инструкция SELECT, которая использует ключевое слово EXISTS для сравнения строк в таблице со строками в другой таблице.

В дополнение к этому это коррелируют запрос, который выполняется для каждой строки табл.1.

EXISTS может во многих случаях заменить IN и часто более выгодно, чем IN.

+0

Пожалуйста, добавьте несколько пояснений к вашему коду. Кодовые ответы иногда достаточно хороши, но ответы на код + объясняются всегда лучше – Barranka

+0

Это то, что необходимо. Благодаря! – slider

Смежные вопросы