1

現在、2 つのデータベースに対して 2 つのクエリを実行しています。1 つ目は特定の user_id のすべての値を 0 に設定し、2 つ目は各ユーザーをランク 1 で更新します。

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

それらを統合したかったのですが、これは可能でしょうか..?

4

2 に答える 2

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
于 2013-07-14T14:48:51.477 に答える
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)
于 2013-07-14T14:49:48.103 に答える