繁体   English   中英

如何在同一查询中从表 A 和表 B(如果存在)中删除?

[英]How to delete from table A and table B (if exists) in the same query?

我在下面尝试过但没有成功,它只是失败了,因为 table_B 是空的。 所以我想至少从 table_A 中删除记录,即使 table_B 是空的。

仅供参考:table_A 记录始终存在,因此无需搜索是否存在。

$sql_remove_rfid = $dbi->prepare("
DELETE 
  FROM table_A
     , table_B
  LEFT 
  JOIN table_B 
    ON table_A.id = table_B.key
WHERE table_A.id=?");

你的语法不太正确,应该是:

DELETE A, B
FROM table_A A
LEFT JOIN table_B B ON A.id = B.key
WHERE A.id=?

请注意,通常最好避免使用 MySQL 保留字 ( key ) 作为列名。

另请注意,如果key是从table_Btable_A的外键,并且您总是希望在删除table_A中的相应id时从table_B中删除条目,则可以将key定义为table_A(id)的外键并指定ON DELETE CASCADE :

ALTER TABLE table_B ADD FOREIGN KEY (`key`) REFERENCES table_A(id) ON DELETE CASCADE

然后你可以简单地从table_B中删除, table_A中的相应行(如果有的话)将自动删除:

DELETE
FROM table_A
WHERE id = ?

您似乎希望根据某个 ID 从 TABLEA 中删除数据,而不管该 ID 是否存在于 TABLEB 中。 因此为什么 JOIN 条件。 有可能

$sql_remove_rfid = $dbi->prepare("DELETE FROM 
table_A
WHERE table_A.id=?");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM