我试图根据某些文件删除重复的行。 当我在运行以下查询时:
delete
from slowmo_vid as sv1, slowmo_vid as sv2
where sv1.video_id = '2luh6g3ni5ex'
and sv1.slowmo_end_t<=sv2.slowmo_end_t;
我收到错误:
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 'as sv1, slowmo_vid as sv2
where sv1.video_id = '2luh6g3ni5ex'
and sv1.slowmo_end' at line 2
表格的字段是:id,video_id internal_uri,slowmo_end_t
答案 0 :(得分:5)
您似乎试图在DELETE
语句中执行ANSI-92样式的内部联接。但WHERE
子句不能同时用于强制连接和对结果集强制执行限制。而是,执行以下显式INNER JOIN
以删除所需的记录。请注意,很明显WHERE
子句正在扮演什么角色。
更新:如果要删除包含最大video_id
的记录除之外的所有记录,则可以在WHERE
子句中添加嵌套子查询。
DELETE sv1.*
FROM slowmo_vid sv1
INNER JOIN slowmo_vid sv2 ON sv1.slowmo_end_t <= sv2.slowmo_end_t
WHERE sv1.video_id = '2luh6g3ni5ex' AND
sv1.video_id <> (SELECT x.id
FROM (SELECT MAX(t.video_id) AS id
FROM slowmo_vid t) x)
答案 1 :(得分:0)
您可以在DELETE语句中指定多个表来删除行 来自一个或多个表,取决于特定条件 WHERE子句。但是,您不能在a中使用ORDER BY或LIMIT 多表DELETE。 table_references子句列出了表 参与加入。其语法在第12.2.8.1节中描述, “JOIN语法”。
http://dev.mysql.com/doc/refman/5.6/en/delete.html
手册中的示例是:
DELETE t1, t2 FROM t1 INNER JOIN t2 INNER JOIN t3
WHERE t1.id=t2.id AND t2.id=t3.id;
答案 2 :(得分:-2)
您不能在DELETE语句中使用别名。您可以尝试:
DELETE FROM myAlias USING `my_table` AS myAlias
或者尝试没有任何别名