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.
Зачем вам это нужно в отдельной таблице? Работает ли у вас одна таблица с столбцами «id, name, status»? – carlosherrera
Структура таблиц не может быть изменена. – slider
Отметьте это [вопрос] (http://stackoverflow.com/questions/224732/sql-update-from-one-table-to-another-based-on-a-id-match). – programmer43229