DELETE + JOIN + ORDER BY + LIMIT = синтаксическая ошибка - PullRequest
4 голосов
/ 30 июля 2011

Бросьте ORDER BY + LIMIT, или JOIN, и все персики. Соедините их, и я, кажется, выпустлю Кракена. Кто-нибудь, кто может пролить свет?

DELETE table1 AS t1
FROM table1 AS t1 LEFT JOIN table2 AS t2 ON t1.id = t2.id
WHERE t2.field = 'something'
ORDER BY t1.id DESC
LIMIT 5

( Удалить, используя псевдонимы )

Я тоже попробовал без псевдонимов и сбросил WHERE, но безрезультатно. Всегда синтаксическая ошибка "near 'ORDER BY...".

Ответы [ 3 ]

10 голосов
/ 30 июля 2011

Из Mysql Docs: DELETE

Для синтаксиса с несколькими таблицами DELETE удаляет из каждого tbl_name строки, которые удовлетворяют условиям. В этом случае нельзя использовать ORDER BY и LIMIT .

В вашем случае, я думаю, что это работает:

DELETE 
FROM table1
WHERE EXISTS
      ( SELECT t2.id
        FROM table2 AS t2
        WHERE t2.id = table1.id
          AND t2.field = 'something'
      ) 
ORDER BY id DESC
LIMIT 5
3 голосов
/ 30 июля 2011

Если вам действительно нужно это сделать, вы можете сделать следующее

DELETE table1 
WHERE id in
      (SELECT t.id
      FROM table1 AS t INNER JOIN table2 AS t2 ON t1.id = t2.id
      WHERE t2.field = 'something' --No point in doing a LEFT JOIN because of this
      ORDER BY t1.id DESC
       LIMIT 5)
1 голос
/ 30 июля 2011

t1 не был объявлен как псевдоним.Попробуйте t везде, где у вас есть t1 (или наоборот).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...