MySQL против MariaDB - то же обновление ... выберите неудачу в MariaDB - PullRequest
0 голосов
/ 22 сентября 2018

Я выполняю поиск в простой базе данных с примерно 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, на предмет правильного синтаксиса, который следует использовать рядом с «WHERE CONCAT (цели, организации») в строке 4.

Я выделил оператор SELECT (и добавил from mapping), и это тоже работает. Но обновление работает только локально, а не на живом сайте.

Я ломал голову с прошлой ночи. Есть идеи?

1 Ответ

0 голосов
/ 22 сентября 2018

Вам необходимо удалить подзапрос, потому что он не нужен:

-- 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%');

дБ <> Скрипт демо 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 demo - MySQL


Статья по теме: Невозможно указать таблицу назначения для обновления в предложении FROM

...