2015-10-30 5 views
1

У меня есть две таблицы: chapter и updatesMySQL UPDATE запросов с исключениями

У меня есть запрос UPDATE, чтобы установить идентификаторы участников из updates таблицы в chapter таблице. Проблема, которую я пытаюсь найти в синтаксическом решении, заключается в том, что мне нужно использовать один запрос, но НЕ обновлять (пропускать) значение, если значение обновления равно '0'. Когда обновление выполняется (для ожидания обработки UPDATE), не все идентификаторы изменены, а те, которые не сохранены, сохраняются в моей таблице updates как '0', а действительные изменения - семизначное целое. Проблема возникает при применении UPDATE, любые существующие идентификаторы перезаписываются '0', когда это поле должно иметь существующее существующее значение. Образец моего текущего запроса:

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 не будет обновляться, если updates.president_id = '0'

Если это выполнимо, любая помощь или руководство будет быть оцененным.

+0

Как соотносятся таблицы 'updates' и' chapter'? Есть ли что-нибудь, чтобы присоединиться к ним на – dan08

+0

Таблицы объединены chapter.id = updates.chapter_id –

ответ

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() 
+0

Каков наилучший способ расширить это, включив проверку того, не являются ли другие идентификаторы «0». В качестве примера я использовал поле chapter.president, но мне нужно также проверить еще десяток других полей. Чтобы связать это, в моем примере это будет эквивалентно обновлению любого из полей, включая chapter.president, chapter.vice_president, chapter.secretary, если update.president_id! = '0' и updates.vice_president_id! = '0 ', updates.secretary_id! =' 0 '. –

+0

@MarkHelmstetter основная идея иметь его в состоянии соединения все еще стоит. Вы можете использовать оператор 'in', чтобы писать его элегантно, хотя:' '0' не в (updates.president_id, updates.vice_president_id, updates.secretary_id) '. – Mureinik

0

Ниже запрос не будет обновлять chapter.president, если updates.president_id = 0, но обновит все другие поля.

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() 
Смежные вопросы