0

次のようなMySQLチャートテーブルがあります: PRIMARY KEY(ID), Name, Value, Date

「名前と値と日付」が既存の行と同じ場合、重複を削除する必要があります。私は少し前に見つけた解決策の下にあり、それはうまくいきました(100%ではありません)が、私はBASIC MySQLにしか興味がないので、全体のコマンドを理解していません...誰かが私にもう少し説明してもらえますか...

間違いなく最後のxは何ですか???

$delDups = "delete from chart where id not in (select * from (select min(id) from chart n group by value) x)";

mysql_query($delDups);
4

3 に答える 3

1

次のように、もっと簡単にできるように思えます。

$delDups = "delete from chart where id not in (select min(id) from chart n group by value)";

あなたが言っているサブクエリで:「ねえ、すべての値を取り、値のグループの最小IDを見つけてください」

したがって、サブクエリの結果を "(12, 13, 200)" のようなリストとして想像してください.. NOT IN 演算子はそのリストを取得し、それを使用して上位のクエリの結果をフィルタリングし、「私にすべての結果、id がこのリストにあるものを除く"

期待通りに説明できたかどうかはわかりません...

于 2013-09-29T20:48:36.787 に答える
1

3 つの列すべてに一意のキーを追加できます。

ALTER IGNORE TABLE my_table
ADD CONSTRAINT uc_unic UNIQUE (Name, Value, Date)

そのxに関しては、mysqlはエイリアスを許可し、基本的に便宜上ショートカットに名前を付けます。

于 2013-09-29T20:50:04.327 に答える
0

あなたが書いたものはほとんどうまくいきます.andを句に追加nameしたいだけです. このようなことをする必要があります。dateGROUP BY

DELETE FROM chart
WHERE id NOT IN (
  SELECT MIN(id)
  FROM chart
  GROUP BY name, value, date)

DELETE FROMテーブルから行を削除したいと言っています。このWHERE節は、実際に削除したい行を示します (それを見逃すと、すべてが削除されます)。括弧内のサブクエリはnamevalueとのすべての組み合わせを調べ、各組み合わせからdate1 つidを返します。すべてをまとめると、各グループで最小ではないDELETEすべての行がドロップされるはずです。id

それが役立つことを願っています!

于 2013-09-29T20:51:22.453 に答える