2015-07-26 2 views
1

У меня есть запрос, который объединяет 2 таблицы. Я хочу обновить столбец результата.Как обновить на union

что-то вроде этого:

select * from(
    select a.*,'10' as srv from px_conversions_srv10 a 
    union all 
    select b.*,'12' as srv from px_conversions_srv12 b 
) as ff where ff.adv_transaction_id in(1333764016); 
update ff SET ff.`status`=8; 

Благодаря

+0

это обновление действительно не имеют никаких условий? Итак, вы можете просто обновить все строки данного trancation_id обеих таблиц. – luksch

ответ

1

Поскольку она исходит из двух разных таблиц, необходимо выяснить, из какой таблицы приходит результат. Вы можете сделать это, добавив столбец в запрос и позже решив из значения столбца, которую следует обновить. Вы делаете это уже со столбцом srv!

Оператор обновления должен быть в исходной таблице, так как объединение создается только по запросу. Это не физическая таблица в базе данных.

В соответствии с этой логикой, чтобы ответить на вопрос в заголовке, вы НЕ МОЖЕТЕ выполнить UPDATE в результирующем наборе запроса SELECT.

1

Просто запустите два обновления:

update px_conversions_srv10 
    set status = 8 
    where adv_transaction_id in (1333764016); 

update px_conversions_srv12 
    set status = 8 
    where adv_transaction_id in (1333764016); 

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

Примечание: наличие нескольких таблиц с одинаковыми столбцами обычно является признаком плохой структуры базы данных. Есть причины, по которым это может быть полезно (скажем, в таблицах есть разные требования к репликации или разные требования безопасности). Но, в целом, одна таблица - лучшая идея.

0

Может создать таблицу просмотра, а затем обновить его:

CREATE VIEW ff AS 
select * from(
    select a.*,'10' as srv from px_conversions_srv10 a 
    union all 
    select b.*,'12' as srv from px_conversions_srv12 b 
) as ff where ff.adv_transaction_id in(1333764016); 
update ff SET ff.`status`=8; 
Смежные вопросы