MySql 8 删除有限制的子查询

MySql 8 delete subquery with limit

我对这个查询有疑问:

DELETE FROM tableA
WHERE idTableA IN
(SELECT tA.idTableA
    FROM tableB tB
    LEFT JOIN tableA tA ON tB.idTableB = tA.idTableA
    WHERE tB.campoX = 100 LIMIT 1);

错误响应:错误代码:1235。此版本的MySQL尚不支持'LIMIT & IN/ALL/ANY/SOME subquery'

示例数据:

表B 10 行(这是 table 大师)

表A 50 行(table tableB 的详细信息)

我想删除 tableA 与 master (tableB) 相关的所有记录详细信息,并在 tableB 上使用条件过滤器并限制为 1 行 ( 这个限制只是为了衡量一个删除行的执行时间)

MySql 的版本:8

有什么想法吗? tk

DELETE tableA.*
FROM tableA 
JOIN (SELECT tA.idTableA
      FROM tableB tB
      LEFT JOIN tableA tA ON tB.idTableB = tA.idTableA
      WHERE tB.campoX = 100 LIMIT 1) USING (idTableA);

?

可以对select行使用exists(这最好处理b中有多行匹配的情况),直接在外部查询中使用limit

delete from tablea a
where exists (select 1 from tableb b where b.campox = 100 and b.idtableb = a.itablea)
order by a.idtablea
limit 1

请注意,我在查询中添加了一个 order by 子句,因此明确定义了要删除的记录。