使用左连接的MySQL Update Query

Lay*_*yke 24 mysql left-join

表格式

表名: file_manager_folder

行:id,parentId,name

我的查询模拟将文件夹移动到另一个文件夹并使用IN(?)接受数组.

我希望我的更新只是"移动"一个文件夹,如果还没有一个具有相同parentId和name的文件夹.您在任何普通文件系统下都会遇到的行为.

例如:

UPDATE file_manager_folder set parentId = 54 where id IN( '1','2',3') 
Run Code Online (Sandbox Code Playgroud)

将是一个查询,它不会检查有关parentId和name的任何内容......但是如何让左连接工作.

这是我试过的一个..这完全不起作用.

SELECT * FROM 
    file_manager_folders as a
LEFT JOIN file_manager_folders as b on a.id = b.id 
WHERE b.id IS NOT NULL and a.id IN("1","2","3") and a.parentId = 54
Run Code Online (Sandbox Code Playgroud)

UPDATE table1 LEFT JOIN table2 SET t1.x = t2.y ON condition WHERE conditions

Bil*_*win 52

所以,你要只有当目标父文件夹下的同名文件夹不移动文件夹存在:

UPDATE file_manager_folder f1
LEFT OUTER JOIN file_manager_folder f2 
    ON f1.name = f2.name AND f2.parentId = 54
SET f1.parentId = 54 
WHERE f2.name IS NULL AND f1.id IN (1,2,3);
Run Code Online (Sandbox Code Playgroud)

连接条件在目标父级下搜索具有相同名称的文件夹.WHERE子句测试不存在此类文件夹(仅当外部联接找不到匹配项时,f2.name为null).