mysql 在连接表时删除行

标签 mysql sql database join

我是数据库新手,有一个关于删除数据的问题。 我想从一个表中删除一行,而该表链接到另外 2 个不同的表。

查看表格图片:

JBCITY

jbsupplier

jbitem

我尝试了这段代码,但它给了我一个错误:

delete jbsupplier,jbitem 
from jbitem 
inner join jbsupplier 
inner join jbcity  
where jbitem.supplier=jbsupplier.id 
    and jbsupplier.city=jbcity.id;


ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`louhj600`.`jbitem`, CONSTRAINT `fk_item_supplier` FOREIGN KEY (`supplier`) REFERENCES `jbsupplier` (`id`))

请任何人给我一些建议和帮助。

预先感谢/路易斯

最佳答案

外键是存储在一个表中但最初来自另一个表的值。

尽管您的架构丢失,但我有一种感觉,它看起来像这样:

城市是顶级表,其 ID 在供应商中引用。 供应商 ID 在项目中引用。

因此,为了删除亚特兰大的供应商。您需要首先删除来自亚特兰大供应商的所有项目。然后删除供应商。

使用 2 个查询最容易完成此操作。

delete i.* from jbitem i join jbsupplier s on i.supplier = s.id join jbcity c on s.city = c.id WHERE c.id = ^ID of Atlanta^;

delete s.* from jbsupplier s join jbcity on jbsupplier.city = jbcity.id where c.id = ^ID of Atlanta^;

关于mysql 在连接表时删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49761864/

相关文章:

sql - 为每个类别选择 N 条记录并按 X 排序

mysql - Follower 系统,MySQL 好还是 Redis 好?

mysql - 只从数据库中选择表而不是 View

mysql - 如何在同一列上找到具有多个不同值的结果?

PHP 超链接不能用作变量

MySQL:查询具有两个不同列日期的不同列

java - 在java中准备语句时使用long而不是int有什么缺点吗?

php - SQL语法的MySQL服务器版本错误,要求在 'CompletedNo SELECT (OrderNo.) FROM `顺序附近使用正确的语法

php - 有评论时 MySql 查询不运行

mysql - SQL select结果之间的算术运算