在DELETE查询中绕过自引用

Don*_*ply 7 mysql

我正在尝试删除所有不是其名称下的最新版本的记录,但显然您无法在同一查询中引用正在修改的表.

我试过这个,但由于上述原因,它不起作用:

DELETE FROM table
WHERE CONCAT(name, version ) NOT IN (
SELECT CONCAT( name, MAX( version ) )
FROM table
GROUP name
)
Run Code Online (Sandbox Code Playgroud)

我怎么能绕过这个?

干杯

Mar*_*ith 8

将内部引用包装在派生表中.

DELETE FROM table
WHERE  Concat(name, version) NOT IN (SELECT nv
                                     FROM   (SELECT Concat(name, Max(version))
                                                    AS nv
                                             FROM   table
                                             GROUP  BY name) AS derived)  
Run Code Online (Sandbox Code Playgroud)


Ang*_*dar 7

delete t1
from  table_name1 t1, table_name1 t2 
where t1.version < t2.version 
and t1.name = t2.name;
Run Code Online (Sandbox Code Playgroud)

//这里需要创建别名