数千のレコードを持つテーブルがあります。名が重複しているすべてのレコードを更新したい 単一のクエリでこれを達成するにはどうすればよいですか? テーブル構造の例:
Fname varchar(100)
Lname varchar(100)
Duplicates int
この重複列は、1 回のクエリで重複の総数で更新する必要があります。これはループで実行せずに可能ですか?
数千のレコードがあるテーブルがあります。名が重複しているすべてのレコードを更新したい単一のクエリでこれを実現するにはどうすればよいですか?
いわゆる重複の数を保存してもよろしいですか?そうでない場合、それはかなり単純なクエリです。
SELECT fname, COUNT(1) AS number FROM yourtable GROUP BY fname;
しかし、なぜその番号を保存したいかはわかりません。別のレコードが挿入されている場合はどうなりますか?レコードが削除された場合はどうなりますか?「重複の数」は同じままであるため、最初の突然変異で不正確になります。
update table as t1
inner join (
select
fname,
count(fname) as total
from table
group by fname) as t2
on t1.fname = t2.fname
set t1.duplicates = t2.total
最初に列を作成してから、次のようなクエリを記述します。
UPDATE table SET table.duplicates = (SELECT COUNT(*) FROM table r GROUP BY Fname/Lname/some_id)
たぶん、この他のSOが役立つでしょうか?
これができない場合があります。同じクエリで選択している同じテーブルを更新することはできません。