从 WHERE 中使用的相同 table 中删除

DELETE from same table used in the WHERE

我有以下查询应该从具有循环 FK 要求的 table 中删除;

DELETE FROM question 
WHERE defaultGotoQuestionId IN (
    SELECT id from question WHERE facilityId IN (
        SELECT id FROM facility WHERE customerId NOT IN (1,76)
        )
    );

但是我收到以下错误;

Table 被指定了两次,分别作为 'DELETE' 的目标和数据

的单独来源

我理解错误消息 - 我无法从我在 WHERE 中指定的 TABLE 中删除 - 我自己似乎无法弄清楚如何解决它。 我看到了一些使用连接的示例 - 但也许我今天休息 - 因为我一直在迭代 copy/paste 个示例 - 但仍然无法管理它。

它作为 SELECT 工作:因为结果给了我要删除的记录;

SELECT id FROM question 
WHERE defaultGotoQuestionId IN (
    SELECT id from question WHERE facilityId IN (
        SELECT id FROM facility WHERE customerId NOT IN (1,76)
        )
    );

感谢您的帮助!

您使用的是什么版本的 MariaDB?

DELETE :: Same Source and Target Table

Until MariaDB 10.3.1, deleting from a table with the same source and target was not possible. From MariaDB 10.3.1, this is now possible.

参见dbfiddle

在旧版本的 MariaDB 中(或者在 MySQL 中),您可以使用的一个选项是:

DELETE
  `question`
FROM
  `question`
  INNER JOIN (
    SELECT
      `id`
    FROM
      `question`
    WHERE  
      `defaultGotoQuestionId` IN (
        SELECT
          `id`
        FROM
          `question`
        WHERE
          `facilityId` IN (
            SELECT
              `id`
            FROM
              `facility`
            WHERE
              `customerId` NOT IN (1, 5)
          )
      )
  ) `der` ON
    `question`.`id` = `der`.`id`;

dbfiddle