0

私はこのような更新クエリを持っています

UPDATE table_a AS a
    INNER JOIN table_b AS b
        ON a.id = b.id
SET a.category = b.category

table_a は、インポート ファイルのデータをフォーマットするために使用する一時テーブルです。table_b は、インポート用に table_a にコンパイルしているいくつかのテーブルの 1 つです。

現在、table_a の 1 つの ID が table_b で 2 つのカテゴリを返すという問題が発生しています。値の 1 つだけが必要なため、これは問題です。

table_b に優先度フィールドを使用する必要があることがわかりました。table_b に table_a の 1 つの ID に対して 2 つの結果がある場合、優先度が最も高い値を取得します (つまり、cat_a の優先度は 99 で、cat b の優先度は 82 です)。 cat_c の優先度が 95 の場合、cat_b が選択されます)

問題は、このようなことを行う方法がわからないことです。または、可能であれば、誰かがいくつかのアイデアを持っています

4

1 に答える 1

2

これらの問題について考えるときは、select ステートメントだけから始めると便利です。

select b.*
from table_b b join
     (select b.id, max(priority) as maxp
      from table_b
      group by b.id
     ) bmax
     on b.id = bmax.id and
        b.priority = bmax.maxp

次に、これをに置き換えることができますupdate

UPDATE table_a a join
       (select b.*
        from table_b b join
             (select b.id, max(priority) as maxp
              from table_b
              group by b.id
             ) bmax
             on b.id = bmax.id and
                b.priority = bmax.maxp
       ) b
       ON a.id = b.id
    SET a.category = b.category
于 2013-07-19T01:57:00.430 に答える