我正在一个包含大约 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 语法有误;请查看手册 对应于您的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 子句中指定要更新的目标表