MySQL vs. MariaDB - 相同的更新.在 MariaDB 中选择失败



我正在一个包含大约 7 个相关字段的简单数据库上实现搜索。这个想法是CONCAT7 个字段并使用LIKE运算符查找搜索词。不匹配的记录具有设置为零的标志 (filter(。

UPDATE mapping SET FILTER = 0 WHERE id IN(
SELECT id WHERE
CONCAT(Field1, Field2, F3, F4, F5, F6, F7) NOT LIKE "%searchTerm%"
);

这就像我的本地开发MySQL的魅力。

但是,我的主机使用 MariaDB,我收到一条错误消息:

#1064 - 您的 SQL 语法有误;请查看手册 对应于您的MariaDB服务器版本,以便使用正确的语法 在第 4 行的"WHERE CONCAT( 目标、组织("附近。

我已经隔离了 SELECT 语句(并添加了from mapping(,这也有效。但是,更新仅适用于本地,不适用于实时站点。

从昨晚开始,我一直在绞尽脑汁。有什么想法吗?

您需要删除子查询,因为它是不必要的:

-- works on MySQL/MariaDB
UPDATE mapping 
SET FILTER = 0 
WHERE CONCAT(F1, F2) NOT LIKE '%searchTerm%';

如果你想按照你的建议使用IN运算符,那么你必须使用FROM子句:

-- this will work only in MariaDB
UPDATE mapping 
SET FILTER = 0 
WHERE id IN(SELECT id FROM mapping WHERE CONCAT(F1, F2) NOT LIKE '%searchTerm%');

db<>小提琴演示 玛丽亚DB 10.3

为了帮助 MySQL:

UPDATE mapping 
SET FILTER = 0 
WHERE id IN(SELECT id   -- note additional subquery
FROM (SELECT id FROM mapping 
WHERE CONCAT(F1, F2) NOT LIKE '%searchTerm%') sub);

db<>fiddle demo - MySQL


相关文章: 不能在 FROM 子句中指定要更新的目标表

最新更新