mysql与mariadb-相同的更新…在mariadb中选择失败

l7mqbcuq  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(382)

我正在一个简单的数据库上实现一个搜索,其中包含7个相关字段。我们的想法是 CONCAT 7个字段,并使用 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语法有错误;在第4行“where concat(targets,organizations)”附近,检查与您的mariadb服务器版本相对应的手册,以了解要使用的正确语法。

我已经隔离了select语句(并添加了 from mapping ),这也行。但是,更新只在本地有效,而不是在一个实时站点上。
从昨晚开始我就绞尽脑汁了。有什么想法吗?

nuypyhwy

nuypyhwy1#

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

-- 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<>小提琴演示maria 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演示-mysql
相关文章:不能在from子句中指定更新的目标表

相关问题