基本上,我有两个具有 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/