2013-07-14 4 views
1

В настоящее время у меня есть два запроса по двум базам данных. Первые устанавливает все значения в 0 для данного user_id, и секунды обновляет каждый пользователь с рангом 1.Обновление двух таблиц в MySQL с двумя разными условиями WHERE

UPDATE table_1 
JOIN table_2 ON table_1.user_id = table_2.user_id 
SET table_1.value = 0, 
table_2.total_value = 0 
WHERE table_2.user_id = %s AND table_1.user_id =%s 

и

UPDATE table_1 
JOIN table_2 ON table_1.user_id = table_2.user_id 
SET table_1.value = 555, 
table_2.total_value =1555 
WHERE table_1.rank =1 

Я хотел объединить их вместе, это было бы возможно ..?

+1

Если есть две отдельные базы данных, ответ отрицательный. Они должны находиться в одной базе данных. – edwardmp

ответ

1
UPDATE table_1 
JOIN table_2 ON table_1.user_id = table_2.user_id 
SET table_1.value = case when table_2.user_id = %s AND table_1.user_id =%s 
         then 0 
         else table_1.value 
        end, 
    table_1.value = case when table_1.rank =1 then 555 else table_1.value end, 
    table_2.total_value = case when table_2.user_id = %s AND table_1.user_id =%s 
           then 0 
           else table_2.total_value 
          end, 
    table_2.total_value = case when table_1.rank =1 then 1555 else table_2.total_value end 
WHERE 
(
    table_2.user_id = %s AND table_1.user_id =%s 
) 
OR table_1.rank =1 
0

У вас могут быть инструкции CASE для установки значения в столбце.

UPDATE table_1 
     INNER JOIN table_2 
      ON table_1.user_id = table_2.user_id 
SET  table_1.value =  CASE WHEN table_2.user_id = %s AND table_1.user_id = %s THEN 0 
           WHEN table_1.rank = 1 THEN 555 
           ELSE table_1.value 
          END, 
     table_2.total_value = CASE WHEN table_2.user_id = %s AND table_1.user_id = %s THEN 0 
            WHEN table_1.rank = 1 THEN 1555 
            ELSE table_1.value 
           END 
WHERE (table_2.user_id = %s AND table_1.user_id = %s) OR 
     (table_1.rank = 1) 
Смежные вопросы