私は数千のレコードを持つテーブルを持っています。 重複したファーストネームを持つすべてのレコードを更新したい これを単一のクエリでどのように達成できますか? サンプルテーブルの構造:重複をカウントし、単一のクエリでテーブルを更新します。
Fname varchar(100)
Lname varchar(100)
Duplicates int
この重複する列は、単一のクエリで重複の総数を更新する必要があります。 これはループで実行しないと可能ですか?
私は数千のレコードを持つテーブルを持っています。 重複したファーストネームを持つすべてのレコードを更新したい これを単一のクエリでどのように達成できますか? サンプルテーブルの構造:重複をカウントし、単一のクエリでテーブルを更新します。
Fname varchar(100)
Lname varchar(100)
Duplicates int
この重複する列は、単一のクエリで重複の総数を更新する必要があります。 これはループで実行しないと可能ですか?
これはできない場合があります。同じクエリで選択している同じテーブルを更新することはできません。
最初の列を作成し、その後のようなクエリを記述します。
UPDATE table SET table.duplicates = (SELECT COUNT(*) FROM table r GROUP BY Fname/Lname/some_id)
たぶん、この他には、SOのに役立ちますか?
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
私のクエリは完全に機能します。 –
謝罪!その制約に違反しているようだ。奇妙な。 – eggyal
上記のクエリを試しましたが、結果を表示できませんでした。私は20万レコード近くあり、しばらくしてからぶら下がっていたので、私はそのプロセスを終了しなければならなかった。レコードを制限する方法はありますか?私はちょうど1000のレコードの上記のクエリをテストしたいと思います。 –
私は、数千人のレコードを持つテーブルを持っています。重複したファーストネームを持つすべてのレコードを更新したいのですが、どのようにしてこれを単一のクエリで実現できますか?
には、重複の数を保存してもよろしいですか?そうでない場合は、簡単なクエリです。
SELECT fname, COUNT(1) AS number FROM yourtable GROUP BY fname;
なぜこの番号を保存するのかわかりません。別のレコードが挿入されたらどうなりますか?レコードが削除されたらどうなりますか? 「重複数」は同じままであるため、最初の突然変異では正しくなりません。
真ですが、重複のリストを表示して、不要なものを削除したいとします。だから私はすべての重複を処理する場合、それは簡単になります。私は2週間に1回、この「重複のチェック」プロセスを実行している可能性があります。 –
また、クエリは重複して表示されず、すべてのレコードが一覧表示されます。 –
@KrishnaIyer - having句、すなわちHAVING COUNT(1)> 1を追加してみてください。しかし、最終的な目的が重複を削除する場合は、追加のロジックが必要です。 – Leigh
いくつかのサンプルデータを表示できます<-->希望の出力? – eggyal