从 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。
我有以下查询应该从具有循环 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。