DELETE + JOIN + ORDER BY + LIMIT = syntax error

前端 未结 3 1632
[愿得一人]
[愿得一人] 2021-01-13 23:49

Drop the ORDER BY + LIMIT, or the JOIN, and everything is peaches. Put them together and I seem to release the Kraken

相关标签:
3条回答
  • 2021-01-14 00:12

    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
    
    0 讨论(0)
  • 2021-01-14 00:17

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

    0 讨论(0)
  • 2021-01-14 00:21

    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)
    
    0 讨论(0)
提交回复
热议问题