基于两个表的mySQL删除
在mySQL中,我有两个表(course和section),我想删除所有1学分和周一的部分。课程表包含课程的学分,部分表包含该部分课程的天数。以下是我的查询内容,但我发现了错误:基于两个表的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%' )
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
,但这只是一个猜测。我需要使用自然连接,所以我将尝试以自然连接语句为基础。