从表中删除数据而不创建临时表

时间:2019-12-24 07:47:28

标签: mysql database join select left-join

我有三个表,它们与下图匹配:

visualization of the tables

我需要从join_table中删除一些数据,其中label列(table_right)和name列(table_left)匹配某些条件。

我的解决方案是使用临时表:

create temporary table if not exists data_for_deletion
(select jt.id
 from join_table jt
          left join table_left tableLeft on jt.table_left_id = tableLeft.id
          left join table_right tableRight on jt.table_right_id = tableRight.id
 where tableLeft.name = 'name' and tableRight.label = 'label');

delete from join_table where id in (select id from data_for_deletion);

我的问题是:还有其他方法可以在不创建临时表的情况下进行这种删除吗?

1 个答案:

答案 0 :(得分:1)

您应该能够使用MySQL的多表DELETE语法:

DELETE jt
FROM join_table jt
JOIN table_left tl ON jt.table_left_id = tl.id
JOIN table_right tr ON jt.table_right_id = tr.id
WHERE tl.name = 'name' AND tr.label = 'label'

请注意,由于您有一个WHERE子句,该子句取决于table_lefttable_right中的列,因此使用LEFT JOIN毫无意义,因为它将被转换为还是INNER JOIN(请参阅manual)。