4

このSQLの問題を解決するのを手伝っていただければ幸いです。

2つの列を含むテーブルがあります。この例では、それらにUserIDとLocationIDという名前を付けます。

このテーブルをクリーンアップしたいので、UserIDとLocationIDの一意の各ペアの最初の出現を保持し、同じペアを含む追加の行を削除したいと思います。言い換えれば、私は彼が行ったことがある各ユーザーのすべての場所を知りたいのです。彼が何度も同じ場所を訪れてログに記録された場合は、それらのレコードを削除したいと思います。たとえば、これは元のテーブルです。

ID UserID  LocationID
1. "user1" "location1"
2. "user1" "location2"
3. "user2" "location3"
4. "user1" "location1"
5. "user2" "location3"
6. "user2" "location3"

4.、5、6の行を削除したいと思います。

1つのmysqlコマンドでそれを解決することは可能ですか?ありがとう。

4

2 に答える 2

5

自己結合を使用して削除します。

DELETE t2.*
FROM tablename AS t1
INNER JOIN tablename AS t2
    ON t1.UserID = t2.UserID
    AND t1.LocationID = t2.LocationID
WHERE t1.ID < t2.ID

tablenameテーブルの名前に置き換える必要があります。

于 2013-02-21T20:01:02.393 に答える
1

Oswaldの回答に追加するには、将来の重複を防ぐために、INSERT ... ONDUPLICATEUPDATEを使用できます。

INSERT INTO table (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE c=c+1;

UPDATE table SET c=c+1 WHERE a=1;
于 2013-02-21T20:11:16.767 に答える