我有这个查询来删除表student
和library
中的数据但是我无法从表中删除数据,因为外键已分配给库表
DELETE student, library
FROM student INNER JOIN library
ON student.id = library.student_id
WHERE student.id=6
并且还显示错误:
1. Unexpected keyword. (near "INNER JOIN" at position 37)
2. Unrecognized statement type. (near "INNER JOIN" at position 37)
答案 0 :(得分:1)
连接从多个表中获取数据并将其连接到一个结果集中。 DELETE
删除行而不是结果集 - 您需要从特定表中标识特定行,因此在DELETE
中进行连接没有多大意义。
处理从其他表中删除相关数据的常规方法是执行多个DELETE
语句,或者使用FOREIGN KEY
约束并依赖ON DELETE CASCADE
。有关详细信息,请参阅this。
答案 1 :(得分:1)
您不能一次使用单个查询从多个表中删除数据,并且可以将连接用于复杂的比较。例如,如果要删除特定address
中存在于library
表中的学生记录。在您的情况下,如果您使用join进行单个查询,那么它将删除两个表中id=6
的所有数据
DELETE s
FROM student s
INNER JOIN library l ON s.id = l.student_id
WHERE s.id = 6
相当于
DELETE FROM students WHERE id = 6 --if this id exist in library table
如果您对ON DELETE CASCADE
有约束力,它将删除library
表格中的数据
DELETE FROM students WHERE id = 6
如果没有,则对表数据的
使用单独的查询首先删除子记录然后删除主记录
DELETE FROM library WHERE student_id = 6
DELETE FROM students WHERE id = 6
答案 2 :(得分:0)
您可以点击此链接作为参考
答案 3 :(得分:0)
JOIN的核心目的是检索数据。您也可以将DELETE与JOINS一起使用,但一次只能从一个表中删除。
简单来说,您可以使用此查询来实现此目的:
DELETE
FROM student
WHERE id=1
DELETE
FROM library
WHERE student_id =1
或者,您可以使用级联参照完整性。通过设置级联参照完整性,可以定义在删除或更新外键引用的行时要发生的情况。 有关级联参照完整性的详细信息,请观看此视频:https://www.youtube.com/watch?v=ETepOVi7Xk8