使用where子句删除MySQL行

时间:2015-12-07 09:11:31

标签: mysql sql

我试图根据某些文件删除重复的行。 当我在运行以下查询时:

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

3 个答案:

答案 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

或者尝试没有任何别名