1

我想在我的一个 MySQL Drupal 表中执行清理以删除存储的重复值。这是结构:

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

我的目标是删除具有更大DELTAs 的行,如果NID, VID, FIELD_VALUE存在具有相同的行且具有较小的 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)

不幸的是,数据库说:(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

在三列 () 上将表连接到自身NID, VID, FIELD_VALUE并选择 MAX 值DELTA

只要您不涉及任何其他列,这将起作用。

这是一个很好的例子

于 2012-10-14T17:56:45.550 回答