具有异常的MySQL UPDATE查询

时间:2015-10-30 14:26:37

标签: mysql sql sql-update

我有两张表:chapterupdates

我有一个UPDATE查询,可以将updates表中的成员ID设置为chapter表。我试图找到一个语法解决方案的问题是我需要使用一个查询,但如果更新值为'0',则不要更新(跳过)该值。当提交更新(等待UPDATE处理)时,并非所有ID都被更改,而那些未更新的ID将作为updates保存到'0'表中,而有效更改是七位整数。应用UPDATE时会出现问题,当该字段实际应保留其现有值时,'0'会覆盖任何现有ID。我当前查询的示例是:

UPDATE chapter
SET chapter.election_date = updates.election_date,
 chapter.president = updates.president_id,
 chapter.vice_president = updates.vice_president_id,
 chapter.secretary = updates.secretary_id,
WHERE
    updates.chapter_id = chapter.id
AND updates.installation_date < CURRENT_DATE ()

根据此示例,我试图找到一种方法,chapter.president

时{}}}不会更新

如果这是可行的,我们将不胜感激任何帮助或指导。

2 个答案:

答案 0 :(得分:1)

只需将此条件添加到join子句:

UPDATE chapter
JOIN   updates ON updates.chapter_id = chapter.id AND 
                  updates.president_id != '0'
SET    chapter.election_date = updates.election_date,
       chapter.president = updates.president_id,
       chapter.vice_president = updates.vice_president_id,
       chapter.secretary = updates.secretary_id,
WHERE  updates.installation_date < CURRENT_DATE ()

答案 1 :(得分:0)

如果updates.president_id = 0,则以下查询不会更新chapter.president,但会更新所有其他字段。

UPDATE chapter, updates
SET chapter.election_date = updates.election_date,
 chapter.president = if(updates.president_id<>0,updates.president_id,chapter.president)
 chapter.vice_president = updates.vice_president_id,
 chapter.secretary = updates.secretary_id,
WHERE
    updates.chapter_id = chapter.id
AND updates.installation_date < CURRENT_DATE()