MySQL基于查询结果删除

时间:2017-01-01 22:19:18

标签: mysql database sql-delete

我有以下mysql查询,它从我的数据库中的一个口袋妖怪表中找到最近修改过的唯一spawnpoint_id:

Typescript 2.1.4

我通过以上方式获得了我想要的结果....但现在,我想要删除匹配这些结果的所有记录。

我试图将查询括在#!/usr/bin/env bash flag=false saysomething() { flag=true trap reset 37 echo "Hello there" while [[ $flag == true ]]; do sleep 1 done saysomething } reset() { flag=false } echo "Current pid: $$" saysomething 这样的内容中:

SELECT 
    t1.spawnpoint_id, t1.last_modified
FROM
    pokemon t1
        INNER JOIN
    (SELECT 
        MAX(last_modified) last_modified, spawnpoint_id
    FROM
        pokemon
    GROUP BY spawnpoint_id) t2 ON 
    t1.spawnpoint_id = t2.spawnpoint_id
    AND t1.last_modified = t2.last_modified;

但我收到了MySQL语法错误。我一直在寻找几个小时,最后希望这里的某个人能够帮助我发现我做错了什么。非常感谢。

编辑:SHOW CREATE TABLE口袋妖怪;

DELETE .. NOT IN

1 个答案:

答案 0 :(得分:1)

我认为问题在于您在子查询的部分(不允许)中使用要从中删除行的表pokemon

可以通过首先执行标记要删除的行的update-statement然后执行单独的delete语句来解决此问题。请注意,"不得在from-part中使用" -restriction也适用于update-statements。然而,这可以通过使用连接而不是子选择来解决,如下所示:

create table a (
  x int,
  y int
);

insert into a (x,y) values (1,2),(3,4);

update a a1, (select max(a2.x) as x from a a2) a3 set a1.y = 0 where a1.x = a3.x;

delete from a where y=0