开发者

DELETE + JOIN + ORDER BY + LIMIT = syntax error

开发者 https://www.devze.com 2023-03-24 12:17 出处:网络
Drop the ORDER BY + LIMIT, or the JOIN, and everything is peaches. Put t开发者_StackOverflowhem together and I seem to release the Kraken. Anyone who can shed some light?

Drop the ORDER BY + LIMIT, or the JOIN, and everything is peaches. Put t开发者_StackOverflowhem together and I seem to release the Kraken. Anyone who can shed some light?

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

(Delete using aliases)

I've also tried it without aliases & dropping the WHERE, to no avail. Always a syntax error "near 'ORDER BY...".


From Mysql Docs: DELETE

For the multiple-table syntax, DELETE deletes from each tbl_name the rows that satisfy the conditions. In this case, ORDER BY and LIMIT cannot be used.

In your case, I think this works:

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


If you really need to do this you can do the following

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)


t1 was not declared as an alias. Try t everywhere you have t1 (or vice versa).

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号