2 回答
TA贡献1859条经验 获得超6个赞
你的 SQL 有点乱;ORDER BY 会在 WHERE 之后
INSERT INTO database.wp_usermeta(user_id, meta_key, meta_value)
SELECT user_id, 'ur_form_id' , 210
FROM database.wp_usermeta
WHERE 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' , 210
FROM database.wp_usermeta
WHERE user_id NOT IN (SELECT user_id FROM database.wp_usermeta WHERE meta_key = 'ur_form_id' and meta_value = 210);
TA贡献1963条经验 获得超6个赞
ORDER BY 位于 WHERE 子句之后:
INSERT INTO database.wp_usermeta(user_id, meta_key, meta_value)
SELECT user_id, 'ur_form_id' , 210
FROM 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;
- 2 回答
- 0 关注
- 107 浏览
添加回答
举报