我要在同一张表中执行删除操作。我尝试了不同的方法,但仍然无法正确完成。因此,我收到此错误您无法在FROM子句中指定要更新的目标表'tb'。我尝试对表进行别名处理,但未完成任何操作。我不知道丢失了什么。我感谢任何想法。
indicatorColor: Colors.blueAccent
答案 0 :(得分:1)
为避免在操作同一张表时出现更新错误,您可以尝试使用嵌套的子查询来构建临时表
DELETE FROM tb
WHERE NOT EXISTS (
SELECT *
FROM (
SELECT *
from tb
WHERE `merchantId` = 'A32WNPGI8GE4WW'
AND `marketplaceId` IN ('A1AM78C64UM0Y8', 'A2EUQ1WTGCTBG2', 'ATVPDKIKX0DER')
) t
);
答案 1 :(得分:0)
MySQL在JOIN
和DELETE
中支持UPDATE
。这可以解决此数据库中“相同表”的限制。按照您的逻辑,它看起来像:
DELETE tb
FROM tb LEFT JOIN
tb tb2
ON tb2.`merchantId` = 'A32WNPGI8GE4WW' AND
tb2.`marketplaceId` IN ('A1AM78C64UM0Y8', 'A2EUQ1WTGCTBG2', 'ATVPDKIKX0DER')
WHERE tb2.merchantID IS NULL;
但是,此查询非常不规则。它要么删除所有行,要么不删除任何行。
如果您只想保留这些行,那么这就是方法:
DELETE tb FROM tb
WHERE NOT (tb.`merchantId` = 'A32WNPGI8GE4WW' AND
tb.`marketplaceId` IN ('A1AM78C64UM0Y8', 'A2EUQ1WTGCTBG2', 'ATVPDKIKX0DER')
);
或者:
DELETE tb FROM tb
WHERE tb.merchantId <> 'A32WNPGI8GE4WW' OR
tb.marketplaceId NOT IN ('A1AM78C64UM0Y8', 'A2EUQ1WTGCTBG2', 'ATVPDKIKX0DER');
如果任一列中有NULL
个值,则逻辑也需要考虑到这一点。