在 MySQL 中使用 LEFT JOIN 删除行
在 MySQL 中,创建 LEFT JOIN 可以成为从多个表检索数据的强大工具。但是,尝试对 DELETE 操作使用相同的 LEFT JOIN 语法可能会导致歧义和错误。
问题
考虑一个场景,其中我们有一个“截止日期” ”表和“工作”表。每个作业都有一个状态,某些状态指示应删除关联的截止日期。 LEFT JOIN 可用于选择所需的行:
SELECT * FROM `deadline` LEFT JOIN `job` ON deadline.job_id = job.job_id WHERE `status` = 'szamlazva' OR `status` = 'szamlazhato' OR `status` = 'fizetve' OR `status` = 'szallitva' OR `status` = 'storno'
但是,当尝试使用相同的 LEFT JOIN 语法删除这些行时:
DELETE FROM `deadline` LEFT JOIN `job` ON deadline.job_id = job.job_id WHERE `status` = 'szamlazva' OR `status` = 'szamlazhato' OR `status` = 'fizetve' OR `status` = 'szallitva' OR `status` = 'storno'
MySQL 将抛出错误.
解决方案
至成功删除行后,我们需要显式指定受影响的表。这是通过将表名称放在 DELETE 关键字之前来完成的。
仅删除截止日期行
要仅删除截止日期行,请使用以下查询:
DELETE `deadline` FROM `deadline` LEFT JOIN `job` ON deadline.job_id = job.job_id WHERE `status` = 'szamlazva' OR `status` = 'szamlazhato' OR `status` = 'fizetve' OR `status` = 'szallitva' OR `status` = 'storno'
删除截止日期和作业行
要删除截止日期和作业行,请使用以下查询:
DELETE `deadline`, `job` FROM `deadline` LEFT JOIN `job` ON deadline.job_id = job.job_id WHERE `status` = 'szamlazva' OR `status` = 'szamlazhato' OR `status` = 'fizetve' OR `status` = 'szallitva' OR `status` = 'storno'
仅删除作业行
至仅删除作业行,使用以下查询:
DELETE `job` FROM `deadline` LEFT JOIN `job` ON deadline.job_id = job.job_id WHERE `status` = 'szamlazva' OR `status` = 'szamlazhato' OR `status` = 'fizetve' OR `status` = 'szallitva' OR `status` = 'storno'
以上是如何在 MySQL 中使用 LEFT JOIN 删除行?的详细内容。更多信息请关注PHP中文网其他相关文章!