如何更新联盟

时间:2015-07-26 13:05:23

标签: php mysql sql-update union

我有一个在2个表上进行联合的查询。我想更新结果列。

类似的东西:

LopNr TKOST year month
1        22 2006     7

由于

3 个答案:

答案 0 :(得分:1)

由于它来自两个不同的表,您需要找出结果来自哪个表。您可以通过向查询添加列来执行此操作,然后根据列值确定要更新的表。您已经使用srv列执行此操作了!

update语句必须位于原始表上,因为union仅由查询生成。它不是数据库中的物理表。

通过扩展此逻辑,要回答标题中的问题,您无法对UPDATE查询的结果集执行SELECT

答案 1 :(得分: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);

如果您希望它们在同一时间生效,您可以在单个事务中运行它们。

注意:拥有多个具有相同列的表通常是数据库设计不佳的标志。这可能是有用的原因(例如,表具有不同的复制要求或不同的安全要求)。但是,一般来说,单个表是一个更好的主意。

答案 2 :(得分: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;