mysql - 如何从我的 MySQL 表中删除相似的行?

标签 mysql sql drupal delete-row

我想在我的一个 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

我的目标是删除具有较大 DELTA 的行,如果具有相同 NID、VID、FIELD_VALUE 的行存在但具有较小的 DELTA

我的第一次尝试是以下查询:

从 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 delete和 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 不支持 delete 语句中的别名,但删除别名没有帮助。子查询没问题,单独检查。

最佳答案

这个怎么样?

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

(不要忘记备份你的数据)

关于mysql - 如何从我的 MySQL 表中删除相似的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12884692/

相关文章:

mysql - 对如何构建我的 SQL 查询感到困惑

sql - 选择计数(不同值)返回 1

mysql - 如何在MySQL中使用两个表来使用if条件

php - 使用 mysql 查询每隔几秒刷新一次文本框?

php - 复杂的想法 - 如何为我的 RPG 游戏玩家创建赛车

mysql - 在 MySQL Case 运算符的结果上添加一些文本

MySQL 查询以查找 ID = X 的值,如果 X 不存在则回退到 ID = 0

drupal - 如何向每个用户发送关于他们在 Drupal 中的内容的自动电子邮件

postgresql - Drupal 与 Docker 中的 Postgres : throws exception after install

php - drupal或joomla是否允许将node.js和socket.io与php组合?