一尘不染

使用左联接的MySQL更新查询

mysql

表架构

表名: file_manager_folder

行:idparentIdname

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

如果不存在具有相同parentId和名称的文件夹,我希望更新仅“移动”文件夹。您在任何普通文件系统下期望的行为。

因此,例如:

UPDATE file_manager_folder set parentId = 54 where id IN( '1','2',3')

将会是一个查询,不检查任何有关parentId和名称的信息…但是如何使左联接起作用。

这是我尝试过的..完全不起作用。

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

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


阅读 213

收藏
2020-05-17

共1个答案

一尘不染

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

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);

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

2020-05-17