无法使用内部联接从表中删除数据

时间:2017-09-13 05:36:58

标签: mysql sql

我有这个查询来删除表studentlibrary中的数据但是我无法从表中删除数据,因为外键已分配给库表

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)

4 个答案:

答案 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)

您可以点击此链接作为参考

<强> http://www.mysqltutorial.org/mysql-delete-join/

答案 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