基于两个表的mySQL删除

基于两个表的mySQL删除,mysql,sql-delete,natural-join,Mysql,Sql Delete,Natural Join,在mySQL中,我有两个表(course和section),我想删除所有1学分和周一的部分。课程表包含课程的学分,部分表包含该部分课程的天数。以下是我的查询内容,但我发现了错误: DELETE FROM section WHERE course_ID IN ( SELECT course_ID FROM course NATURAL JOIN section WHERE credits = '1' AND days LIKE '%M%' )

在mySQL中,我有两个表(course和section),我想删除所有1学分和周一的部分。课程表包含课程的学分,部分表包含该部分课程的天数。以下是我的查询内容,但我发现了错误:

DELETE FROM
    section
WHERE
    course_ID
IN (
    SELECT course_ID
    FROM course
    NATURAL JOIN section
    WHERE credits = '1'
    AND days LIKE '%M%'
);

有人能帮上忙吗?

您能为表部分设置相同的表异常吗

为了避免这种情况,您可以尝试在子查询上使用联接,而不是IN子句

DELETE s 
FROM section s
INNER JOIN (
    SELECT course_ID
    FROM course
    NATURAL JOIN section
    WHERE credits = '1'
    AND days LIKE '%M%'

) t  on t.course_ID = s.course_ID

您可能不需要在子查询中重新打开
部分。我怀疑您可以将该查询表述为:

delete s
from section s
natural join course c
where c.credit = 1 and c.days like '%M%'
我不太喜欢
自然联接
s,因为它不明确联接逻辑(并且依赖于匹配的列名,而不是实际的模式依赖项,如外键)。我建议切换到常规联接,可能使用
using()
子句

如果
课程
中可能有多行与给定的
部分
匹配,则
存在
加入
更合适。假设列
section\u id
可用于关联这两个表,您可以执行以下操作:

delete s
from section s
where exists (
    select 1
    from course c
    where c.credit = 1 and c.days like '%M%' and c.section_id = s.section_id
)

“但我会出错”是什么意思?向我们显示确切的错误消息。两个表之间的实际共有列是什么?我使用了第二个解决方案,但我得到了“0行受影响”,其中应该删除很多行。@greenguy:您可能需要检查两个表之间的相关条件。我计算了
section\u id
,但这只是一个猜测。我需要使用自然连接,所以我将尝试以自然连接语句为基础。