簡體   English   中英

將多行從一個表更新到另一個表

[英]Update multiple rows from one table to another

我正在嘗試將多行從一個表更新到另一表。

我有這個工作,但我需要在一個查詢而不是8個單獨的查詢中更新8個值。

我需要這個

slot_id  |  spell_id
--------------------
0    |  1518
1    |  1519
2    |  1522
3    |  3476
4    |  4881
6    |  3475
7    |  4880

對此

spell1 | spell2 | spell3 | spell4 | spell5 | spell6 | spell7 | spell8
---------------------------------------------------------------------
   0   |   0    |   0    |    0   |   0    |     0  |   0    |    0

我所完成的是一次1。

UPDATE instance_saved_info
INNER JOIN character_memmed_spells ON instance_saved_info.id = character_memmed_spells.id
SET instance_saved_info.Spell1 = character_memmed_spells.spell_id
WHERE character_memmed_spells.slot_id = 0

我需要添加使其生效。

SET instance_saved_info.Spell2 = character_memmed_spells.spell_id
WHERE character_memmed_spells.slot_id = 1
SET instance_saved_info.Spell3 = character_memmed_spells.spell_id
WHERE character_memmed_spells.slot_id = 2
SET instance_saved_info.Spell4 = character_memmed_spells.spell_id
WHERE character_memmed_spells.slot_id = 3
SET instance_saved_info.Spell5 = character_memmed_spells.spell_id
WHERE character_memmed_spells.slot_id = 4
SET instance_saved_info.Spell6 = character_memmed_spells.spell_id
WHERE character_memmed_spells.slot_id = 5
SET instance_saved_info.Spell7 = character_memmed_spells.spell_id
WHERE character_memmed_spells.slot_id = 6
SET instance_saved_info.Spell8 = character_memmed_spells.spell_id
WHERE character_memmed_spells.slot_id = 7

謝謝

那么您可以聲明多個SET運算符,例如

UPDATE instance_saved_info
INNER JOIN character_memmed_spells 
ON instance_saved_info.id = character_memmed_spells.id
SET instance_saved_info.Spell1 = character_memmed_spells.spell_id,
instance_saved_info.Spell2 = character_memmed_spells.spell_id2,
.....
WHERE character_memmed_spells.slot_id = 0

假設我正確理解了您的問題,則可以使用帶有conditional aggregation的子查詢來pivot需要update的8個字段:

UPDATE instance_saved_info i
INNER JOIN (
    SELECT id, 
           max(case when slot_id = 0 then spell_id end) slot0,
           max(case when slot_id = 1 then spell_id end) slot1,
           ....
           max(case when slot_id = 7 then spell_id end) slot7
    FROM character_memmed_spells 
    GROUP BY id) c ON i.id = c.id
SET i.Spell1 = c.slot0, i.Spell2 = c.slot1, ..., i.Spell8 = c.slot7

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM