1
item
テーブルのフィールドは、item_id
,priority
、その他のフィールドがあります。私はまたitem_priority
テーブルが2つのフィールド:item_id
とpriority
を持っています。 item
テーブル内のすべてのアイテムに一致するレコードがitem_priority
にあるわけではありません。更新との結合での代替値
item
テーブルを更新して、item_priority
テーブルに基づいて優先度を設定したいとします。一致するアイテムがない場合は、priority
を-1にします。
私は次のことを実行できます。
update item set priority = -1
と
update item
join item_priority on item.item_id = item_priority.item_id
set item.priority = item_priority.priority
これは私が必要なものを私を取得します。しかし、単一のクエリでこれを行う方法はありますか?
注:このデザインは最適ではありませんが、別の理由でこの方法で行う必要があります。私が望むのは、テーブルを再設計せずに単一のクエリでこれを達成することだけです。
ワンクイック編集。 'join'を 'left join'に変更する必要があります – Daniel
私の受け入れられた回答を撤回して申し訳ありません - 数千もの項目でもクエリが非常に遅いです。私は他人にこれがうまくいくという誤った印象を与えたくありません。私はあなたに助けようとするための+1を与えています。ありがとう。 – stepanian
テストを実行しました。私の項目には1261568のエントリがすべて優先順位5000に初期設定されています。私のitem_priorityテーブルには4948個の連続したitem_idと、ランダム値の優先順位があります。 私の最初のクエリは15秒かかりました。 2番目は実際には26秒で遅くなりました。 3.3GHzの2コアCPU。 誰かが上記の最初のクエリよりも何か速いものが出てくるかどうかを調べることに興味があります。あなたのcpuはどのように比較されますか? – Daniel