MySQL,DELETE查询加入

AnA*_*ice 2 mysql sql

有人可以帮我理解这个查询有什么问题:

DELETE FROM noteproject 
INNER JOIN note ON noteproject.noteID = note.noteID
INNER JOIN person ON note.personID = person.personID
WHERE noteID = '#attributes.noteID#' 
  AND personID = '#attributes.personID#'
Run Code Online (Sandbox Code Playgroud)

Alb*_*gni 9

我目前没有数据库来测试我所说的内容,但这里是对mysql文档的引用,以你的案例为例:

您可以在DELETE语句中指定多个表,以根据WHERE子句中的特定条件从一个或多个表中删除行.

并且:

1)对于第一个多表语法,仅删除FROM子句之前列出的表中的匹配行.
2)对于第二个多表语法,仅删除FROM子句(USING子句之前)中列出的表中的匹配行.
结果是您可以同时从多个表中删除行,并具有仅用于搜索的其他表:

1)
DELETE t1, t2 
FROM t1 INNER JOIN t2 INNER JOIN t3
WHERE t1.id=t2.id AND t2.id=t3.id;

2)
DELETE FROM t1, t2 
USING t1 INNER JOIN t2 INNER JOIN t3
WHERE t1.id=t2.id AND t2.id=t3.id;
Run Code Online (Sandbox Code Playgroud)

这些语句在搜索要删除的行时使用所有三个表,但仅删除表t1和t2中的匹配行.


OMG*_*ies 8

你试图使用的东西不起作用的原因是因为MySQL不像你尝试的那样在delete语句中支持连接语法.

使用:

DELETE FROM NOTEPROJECT
 WHERE noteID = '#attributes.noteID#' 
   AND note_id IN (SELECT n.note_id 
                     FROM NOTE n
                    WHERE n.personID = '#attributes.personID#')
Run Code Online (Sandbox Code Playgroud)

......或使用EXISTS:

DELETE FROM NOTEPROJECT
 WHERE noteID = '#attributes.noteID#' 
   AND EXISTS (SELECT NULL
                 FROM NOTE n
                WHERE n.note_id = note_id
                  AND n.personID = '#attributes.personID#')
Run Code Online (Sandbox Code Playgroud)