使用左连接的MySQL更新查询
表架构 表名:使用左连接的MySQL更新查询,mysql,left-join,Mysql,Left Join,表架构 表名:file\u manager\u文件夹 行:id,parentId,name 我的查询模拟将文件夹移动到另一个文件夹中,并使用(?)接受数组 如果还没有具有相同父ID和名称的文件夹,我希望我的更新仅“移动”文件夹。在任何正常文件系统下都会出现这种行为 例如: UPDATE file_manager_folder set parentId = 54 where id IN( '1','2',3') 将是一个不检查任何有关parentId和名称的查询。。。但我怎样才能让左撇子加入工
file\u manager\u文件夹
行:id
,parentId
,name
我的查询模拟将文件夹移动到另一个文件夹中,并使用(?)接受数组
如果还没有具有相同父ID和名称的文件夹,我希望我的更新仅“移动”文件夹。在任何正常文件系统下都会出现这种行为
例如:
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 table 1 LEFT JOIN table 2在条件下设置t1.x=t2.y,其中条件为
,因此仅当目标父文件夹下不存在同名文件夹时才移动文件夹:
联接条件在目标父项下搜索具有相同名称的文件夹。WHERE子句测试不存在这样的文件夹(仅当外部联接未找到匹配项时,f2.name才为null)。有点幼稚,但这又如何
UPDATE file_manager_folder SET parentId = 54
WHERE id IN( '1','2','3')
AND parentId != 54
AND name NOT IN (SELECT name FROM file_manager_folder WHERE id IN ('1', '2', '3'))
我认为这应该通过在
parentid
和name
列上使用a来解决。否则,任何对表具有INSERT/UPDATE访问权限的人都可以绕过您的业务规则
CREATE UNIQUE INDEX blah_uk ON FILE_MANAGER_FOLDER(parentId, name) USING BTREE
如果使用不在中的
而不是左键,则会降低性能
在查询之前先运行Explain,问题很明显。这是完美的账单。我可以看出我已经准备好了基本的东西。。太离谱了!我不知道你怎么这么快就搞定了。我想不出我想参加什么。
CREATE UNIQUE INDEX blah_uk ON FILE_MANAGER_FOLDER(parentId, name) USING BTREE