INNER JOIN作为SELECT工作,但不作为DELETE工作

时间:2014-06-18 21:56:57

标签: mysql sql

为什么会出现语法错误

DELETE FROM `print_mailing_request` pmr
INNER JOIN `person` p
  ON p.id = pmr.person AND p.email LIKE '%@TEST.COM'
WHERE 
pmr.sent_to_fulfiller != 'y'

当这种方法正确无误时?

SELECT * FROM `print_mailing_request` pmr
INNER JOIN `person` p
  ON p.id = pmr.person AND p.email LIKE '%@TEST.COM'
WHERE 
pmr.sent_to_fulfiller != 'y'

2 个答案:

答案 0 :(得分:7)

您需要告诉delete要删除的表格:

DELETE pmr
    FROM `print_mailing_request` pmr INNER JOIN
         `person` p
         ON p.id = pmr.person AND p.email LIKE '%TEST.COM'
    WHERE pmr.sent_to_fulfiller != 'y';

表别名位于delete语句之后和from之前。我假设它是第一个提到的表。

答案 1 :(得分:3)

如果不使用表别名,正确的语法将如下所示。您缺少要删除的表名。

DELETE `print_mailing_request`
FROM `print_mailing_request`
INNER JOIN `person` 
  ON `person`.id = `print_mailing_request`.person 
  AND `person`.email LIKE '%@TEST.COM'
WHERE `print_mailing_request`.sent_to_fulfiller != 'y'