Игнорировать вставку, если выбранный подзапрос возвращает ноль - Mysql - PullRequest
0 голосов
/ 10 марта 2019

Пользователь

user_id  |  name
1        |  John
2        | Matt

еда

food_id  | food_name
1        | A
2        | B

fav_food

user_id(-> user) | food_id(->food)

    2            |   1

Мой запрос на вставку:

INSERT INTO `fav_food`(user_id,food_id) VALUES(?,(SELECT id from `food` where food_name=?))

Когда подзапрос SELECT id from food where food_name=? возвращает пустую вставку, происходит сбой с ошибкой, которая должна быть. Мой вопрос: как я могу игнорировать вставку только тогда, когда подзапрос возвращает ноль или нет строк? Спасибо

Ответы [ 3 ]

1 голос
/ 10 марта 2019

С EXISTS:

INSERT INTO fav_food (user_id, food_id) 
  SELECT ?, (SELECT food_id FROM food WHERE food_name = ?) 
  WHERE EXISTS (SELECT 1 FROM food WHERE food_name = ?)

См. Демоверсию

0 голосов
/ 10 марта 2019

Из того, что я пробовал ранее, вы можете сделать это, используя оператор if в хранимой процедуре, код может выглядеть примерно так:

    if exists (SELECT id from `food` where food_name=?) then
         INSERT INTO `fav_food`(user_id,food_id) VALUES(?,(SELECT id from `food` where food_name=?))
    end if;
0 голосов
/ 10 марта 2019

Вы можете попробовать это:

INSERT INTO `fav_food`(user_id,food_id) VALUES(?,(SELECT id from `food` where food_name=? AND food_name IS NOT NULL))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...