Синтаксическая ошибка sql при вставке данных с проверкой в ​​maria db 10? - PullRequest
0 голосов
/ 23 января 2019

Я правильно запускаю его в своем собственном xampp, но когда я запускаю его на сервере, он выдает ошибку

INSERT INTO `likes`(`id`, `PID`, `UID`)
SELECT NULL,155,68
WHERE NOT EXISTS(SELECT id FROM likes t2 WHERE t2.PID = 115 AND t2.UID=68)

Ошибка:

1064 - у вас есть ошибка вваш синтаксис SQL;проверьте руководство, соответствующее вашей версии сервера MariaDB, на предмет правильного синтаксиса, который можно использовать рядом с «ГДЕ НЕ СУЩЕСТВУЕТ (ВЫБЕРИТЕ ИД ИЗ ЛЮБИТЕЛЕЙ t2 ГДЕ t2.PID = 115 И t2.UID = 68)» в строке 3

Пожалуйста, помогите

Ответы [ 4 ]

0 голосов
/ 23 января 2019

A SELECT требует FROM, если оно также имеет WHERE. Вы можете использовать FROM dual, если вы действительно хотите.

Однако вы пытаетесь предотвратить дублирование, и это не лучший способ сделать это. Вместо этого позвольте базе данных выполнять работу с уникальным индексом или ограничением:

alter table likes add constraint unq_likes_pid_uid unique (pid, uid);

Затем вы можете выразить, что вы хотите сделать, как:

INSERT INTO `likes`(`PID`, `UID`)
    VALUES (155, 68)
    ON DUPLICATE KEY UPDATE pid = VALUES(pid);

На самом деле on duplicate key ничего не делает, кроме предупреждения ошибки.

Почему это лучше?

  • База данных гарантирует целостность данных, поэтому вы знаете, что это правильно.
  • Несколько потоков, вставляющих одинаковые значения, не будут "случайно" вставлять дубликаты.
  • Нет необходимости повторять постоянные значения в запросе, что может привести к ошибкам.
0 голосов
/ 23 января 2019

Вы можете попробовать ниже -

INSERT INTO `likes`(`id`, `PID`, `UID`)
SELECT NULL,155,68 from likes
WHERE NOT EXISTS(SELECT id FROM likes t2 WHERE t2.PID = 115 AND t2.UID=68) 
0 голосов
/ 23 января 2019

Пожалуйста, попробуйте ниже

IF NOT EXISTS(SELECT id FROM likes t2 WHERE t2.PID = 115 AND t2.UID=68)
INSERT INTO `likes`(`id`, `PID`, `UID`)
values (NULL,155,68)
0 голосов
/ 23 января 2019

Если ваша задача - вставить новые значения:

INSERT INTO `likes`(`id`, `PID`, `UID`)
values (NULL,155,68)

Если вы хотите обновить уже существующие кортежи:

 update likes
  set `id`=NULL, `PID`=155, `UID`=68
  WHERE NOT EXISTS(SELECT id FROM likes t2 WHERE t2.PID = 115 AND t2.UID=68); 

если ваша цель - добавить кортеж, если его нет:

delimiter $$
create procedure ins_m()
BEGIN
   IF NOT EXISTS (SELECT id FROM likes t2 WHERE t2.PID = 115 AND t2.UID=68)
   BEGIN
       INSERT INTO `likes`(`id`, `PID`, `UID`)
       values (NULL,155,68)
   END IF
END
$$
delimiter ;

-- to execute the procedure
exec ins_m

Ваш вопрос был не очень ясен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...