MySql查询根据一组过滤器更新多个字段?

时间:2016-02-26 18:31:24

标签: mysql database

我有2个表,adNotebookSlotItem。我目前遇到的问题是adNote表在多行中缺少storyId的值。

好消息是bookSlotItem表格具有storyId的所有正确值。

我正在尝试编写一个基本上会使用adNote.storyId中的值更新bookSlotItem.storyId的查询。但是,如果adNote.storyId没有值adNote.storyTaskTypeClass=2,我只想这样做。我想使用每个表行中的processId值来正确匹配它们。

因此,在下面的示例中,processId表中124 adNote的行将假定storyId值为202,因为它有一个{ {1}} storyTaskTypeClass 2storyId值丢失。

非常感谢任何帮助。此外,任何有用的链接都会很棒。

广告表

╔═══════════╦══════════════╗══════════════════╗
║ processId ║    storyId   ║storyTaskTypeClass║
╠═══════════╬══════════════╣══════════════════╣
║    123    ║              ║         1        ║
║    124    ║              ║         2        ║
║    125    ║      203     ║         2        ║
║    126    ║      204     ║         2        ║
╚═══════════╩══════════════╩══════════════════╝

bookSlotItem表

╔═══════════╦══════════════╗
║ processId ║    storyId   ║
╠═══════════╬══════════════╣
║    123    ║      201     ║
║    124    ║      202     ║
║    125    ║      203     ║
║    126    ║      204     ║
╚═══════════╩══════════════╝

2 个答案:

答案 0 :(得分:1)

您需要使用update

join
update adnote a 
join bookSlotItem b on a.processid = b.processid 
set a.storyid = b.storyid
where a.storyTaskTypeClass = 2
      and a.storyid is null

答案 1 :(得分:0)

这是一个适合您的查询。我之前使用过类似的查询。

UPDATE an
JOIN bookSlotItem bsi 
ON an.processId = bsi.processId
SET an.storyId = bsi.storyId
FROM adNote an  
WHERE an.storyId = '' 
AND an.storyTaskTypeClass = 2

基本上,您需要组合表并根据组合的表值执行UPDATE