1

MySQL Drupal テーブルの 1 つでクリーンアップを実行して、格納されている重複した値を削除したいと考えています。構造は次のとおりです。

NID  VID   DELTA   FIELD_VALUE
100  100   0       foobar
100  100   1       foobar
101  101   0       barbar
101  101   1       barbar
102  102   0       foofoo

DELTA私の目標は、同じ行がNID, VID, FIELD_VALUE小さい s で存在する場合、 sが大きい行を削除することDELTAです。

私の最初の試みは次のクエリでした:

delete from mytable a where a.delta=1 and 1=(select count(nid) from mytable b where b.nid=a.nid and b.vid=a.vid and b.delta=0 and b.field_value=a.field_value)

残念ながら、DB は言う: (MySQL 5.1.65-cll)

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'a where a.delta=1 and 1 = (select count from `field_value` b where' at line 1

これは私にはあまり役に立ちません。

アップデート:

削除された回答によると、MySQL は削除ステートメントでエイリアスをサポートしていませんが、エイリアスを削除しても解決しませんでした。サブクエリは問題ありません。個別にチェックされています。

4

2 に答える 2

1

これはどう?

DELETE a
FROM mytable a
JOIN mytable b ON (a.nid = b.nid
                AND a.vid = b.vid
                AND a.field_value = b.field_value)
WHERE a.delta > b.delta

(データをバックアップすることを忘れないでください)

于 2012-10-14T18:48:46.327 に答える
0

テーブルを 3 つの列 ( NID, VID, FIELD_VALUE) で結合し、 の MAX 値を選択しますDELTA

これは、他の列が関係していない限り機能します。

これは良い例です

于 2012-10-14T17:56:45.550 に答える