如果从数据库获取数据不存在记录,则需要插入到sql中

如果从数据库获取数据时记录不存在,则需要插入到sql中,我尝试这样做:


    INSERT INTO database.wp_usermeta(user_id, meta_key, meta_value)

    SELECT (user_id, 'ur_form_id' , 210)

        FROM database.wp_usermeta ORDER BY user_id DESC LIMIT 1

    WHERE NOT EXISTS (SELECT user_id, 'ur_form_id' , 210

        FROM v.wp_usermeta ORDER BY user_id DESC LIMIT 1);

    

但不行,工作分支说“这个职位无效”


大话西游666
浏览 118回答 2
2回答

BIG阳

你的 SQL 有点乱;ORDER BY 会在 WHERE 之后INSERT INTO database.wp_usermeta(user_id, meta_key, meta_value)SELECT user_id, 'ur_form_id' , 210FROM database.wp_usermetaWHERE NOT EXISTS (SELECT 1 FROM v.wp_usermeta); ORDER BY user_id DESC LIMIT 1您不需要内部排序依据 - 存在查询只是用于确定 v.wp_usermeta 中是否存在任何行 - 它不需要排序。反过来,这会导致外部查询仅在 v.wp_usermeta 中没有行时才返回行,并且仅当表中已有行时才会插入行。如果表是空的,它将永远是空的。如果不为空,则具有最高 ID 的用户将与这些固定属性重复。这真的是你想要的吗?如果您的需求是“查找database.wp_usermeta表中没有'ur_form_id'/210键值对的所有用户,并给他们一个”,它可能更简单地表达为:INSERT INTO database.wp_usermeta(user_id, meta_key, meta_value)SELECT DISTINCT user_id, 'ur_form_id' , 210FROM database.wp_usermetaWHERE user_id NOT IN (SELECT user_id FROM database.wp_usermeta WHERE meta_key = 'ur_form_id' and meta_value = 210); 

神不在的星期二

ORDER BY 位于 WHERE 子句之后:INSERT INTO database.wp_usermeta(user_id, meta_key, meta_value)SELECT user_id, 'ur_form_id' , 210FROM database.wp_usermeta WHERE NOT EXISTS (SELECT user_id, 'ur_form_id' , 210                  FROM v.wp_usermeta                   ORDER BY user_id DESC                   LIMIT 1)ORDER BY user_id DESC LIMIT 1;
打开App,查看更多内容
随时随地看视频慕课网APP