有人可以帮我理解这个查询有什么问题:
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)
我目前没有数据库来测试我所说的内容,但这里是对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中的匹配行.
你试图使用的东西不起作用的原因是因为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)
| 归档时间: |
|
| 查看次数: |
14219 次 |
| 最近记录: |