2017-03-08 40 views
0

這兩個查詢(工作正常)可以用一個替換嗎?用一個等效查詢替換兩個查詢

​​

我不需要創建臨時表。我需要的是更新main.aggr列。

+0

不,您不能用一個等效查詢替換INSERT和UPDATE查詢... –

+0

第一個查詢看起來像這樣一個壞主意。 – Strawberry

回答

1

使用MySQL的多表更新語法:

update main, (
    select a.id, b.aggr 
    from main a 
    join (
     select uk, group_concat(cascina_uk SEPARATOR '|') as aggr 
     from main 
     group by uk 
    ) b on a.uk = b.uk 
) temptable 
set main.aggr = temptable.aggr 
where main.id = temptable.id 

請注意,我只有重新安排你的查詢部分轉換爲正在運行的查詢我懷疑可以對子查詢進行優化。

1

從您的查詢中,我瞭解到您正在更新多個id行,其值相同,爲aggr。那麼這個應該工作:

update main 
set aggr = group_concat(cascina_uk SEPARATOR '|') 
group by uk 
1

試試這個

update main c 
set 
    c.aggr = (select b.aggr 
       from 
        main a, 
        (select uk, group_concat(cascina_uk SEPARATOR '|') as aggr from main group by uk) b 
       where 
       a.uk = b.uk 
       and c.id = a.id)