php - 这个 mySQL 查询可以更好地优化吗?不是 mySQL 专家,但我认为我是对的

标签 php mysql

基本上,我有两个具有 1 对 1 关系的表。
当我从subset_panel_options中删除一行时,我还想删除subset_panel_options_list中的相关行

这是两个表的一些结构。无需显示完整表格。

[subset_panel_options]
->id
->subset_panel_id

[subset_panel_options_list]
->id
->subset_panel_options_id

DELETE subset_panel_options, subset_panel_options_list 
FROM subset_panel_options 
JOIN subset_panel_options_list 
WHERE subset_panel_options.id = subset_panel_options_list.subset_panel_options_id 
AND subset_panel_id = $subsetPanelId

最佳答案

是的,它可以:

DELETE FROM subset_panel_options 
LEFT JOIN subset_panel_options_list
ON (subset_panel_options.id = subset_panel_options_list.subset_panel_options_id)
WHERE subset_panel_options.subset_panel_id = $subsetPanelId

使用LEFT JOIN可以确保从“subset_panel_options”中删除,即使subset_panel_options_list表中没有相应的匹配项。

<小时/>

您可能还想使用 InnoDB 引擎中提供的引用完整性功能。在这种情况下,您需要在 subset_panel_options_list 表中将 subset_panel_options_id 定义为 FK(外键),并在其上定义“ON DELETE CASCADE”约束,这意味着当行当 subset_panel_options 被删除时,subset_panel_options_list 中的“孤立”行也应立即删除。

关于php - 这个 mySQL 查询可以更好地优化吗?不是 mySQL 专家,但我认为我是对的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9509098/

相关文章:

MySQL:组合表1中的多个列并插入表2中的1列

java - 3rd party jar 的 Maven 导出不会通过 mvn install 导出

php - WordPress 更改仅对登录用户可见

php - 如何用 Doctrine 做全文检索?

MySQL 日期和时间函数不存在

Mysql使用PDO的错误信息

php - MySQL 查询以下内容应该是什么?

php - 不区分大小写的搜索不起作用

php - MySQL如何从数据库中获取最新日期的所有行

php - 查询mysql数据库时PDO查询没有返回结果