MySql 8 удалить подзапрос с ограничением - PullRequest
0 голосов
/ 27 марта 2020

У меня проблема с этим запросом:

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». '

ПРИМЕРНЫЕ ДАННЫЕ:

TableB 10 строк (это мастер таблицы)

TableA 50 строк (это таблица деталей таблицы B)

I хотел бы удалить все детали записей таблицы A, относящиеся к мастеру (tableB) с фильтром условий для таблицы B и ограниченные 1 строкой (этот предел предназначен только для измерения времени выполнения для одной строки удаления)

версия MySql: 8

какая-то идея? тк

Ответы [ 2 ]

0 голосов
/ 27 марта 2020

Вы можете использовать существует, чтобы выбрать строки (это лучше всего обрабатывает случай, когда несколько строк совпадают в 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, чтобы запись, которую нужно удалить, была четко определена.

0 голосов
/ 27 марта 2020
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);

?

...