如果select子查询返回null,则忽略插入-MySQL

时间:2019-03-10 10:56:19

标签: mysql database

用户

user_id  |  name
1        |  John
2        | Matt

食物

food_id  | food_name
1        | A
2        | B

最喜欢的食物

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=?子查询返回null时,插入失败并出现错误,应为错误。 我的问题是,仅当子查询返回null或无行时,如何才能忽略插入?谢谢

3 个答案:

答案 0 :(得分:1)

具有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 = ?)

请参见demo

答案 1 :(得分:0)

您可以尝试以下方法:

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

答案 2 :(得分:0)

根据我之前尝试过的方法,可以通过在存储过程中使用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;