【问题标题】:mysql deleting row while joining tablesmysql在加入表时删除行
【发布时间】:2018-09-20 13:25:14
【问题描述】:

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

看桌子的图片:

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

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`))

谁能给我一些建议和帮助,拜托。

提前致谢/路易丝

【问题讨论】:

  • 编辑您的问题并添加包括索引的表的架构。仅供参考,不要发布数据/代码的图像。尝试为您创建答案时无法复制/粘贴。
  • 您需要先从子表中删除行,然后再上到父表。
  • 您是否要删除所有供应商及其产品?
  • 先从子表中删除行,然后是父表。此外,删除查询的语法是错误的。它应该是这种形式- DELETE FROM jbitem WHERE dept = 1 ;
  • 我很抱歉,但我不知道如何添加表格,以便您可以查看它们并从中复制。但问题是“从表 jbsupplier 中删除洛杉矶的所有供应商。这将不能立即工作(您将收到错误代码 23000),您必须通过删除一些其他相关元组来解决。但是,不要从其他表中删除不必要的元组,也不要更改表的结构,即不要删除外键。另外,请记住,您只能在查询中使用“Los Angeles”作为常量,而不是“199”或“900”。

标签: mysql sql database join


【解决方案1】:

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

即使您的架构丢失了,我感觉它看起来像这样:

City 是在 Supplier 中引用其 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^;

【讨论】:

  • 代码正在工作..(有点)但没有删除任何内容,它仍然是相同的表..
  • 运行删除查询的输出是什么?您使用的是什么 ID,您要删除哪个城市?
猜你喜欢
  • 1970-01-01
  • 2018-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多