MySQL中是否支持仅将一张表的单列数据匹配合并到另一张表?
这个需求完全可以实现,用左连接配合COALESCE函数就能满足要求,具体方案如下:
实现逻辑
- 以
wordlist全表为基础,保证返回所有单词的记录 - 先从
user_word表筛选出当前登录用户(这里是edward)的所有记录,再和wordlist按wordID关联 memorize字段优先取用户个性化的记录值,没有对应记录时用wordlist的默认值
可用SQL语句
SELECT w.wordID, w.`char`, COALESCE(uw.memorize, w.memorize) AS memorize FROM wordlist w LEFT JOIN ( SELECT wordID, memorize FROM user_word WHERE userID = 'edward' ) uw ON w.wordID = uw.wordID ORDER BY w.wordID ASC;
说明
- 子查询先过滤指定用户的记录,比直接关联全表再筛选的执行效率更高,适合多用户场景,切换用户只需要修改子查询里的
userID参数即可 COALESCE函数会按顺序返回第一个非NULL的参数值:如果用户有对应单词的学习记录,就返回用户标记的memorize值,没有就返回wordlist的默认值0,完全匹配你的预期输出- 注意
char是MySQL内置关键字,所以在SQL中用反引号包裹避免语法报错
内容的提问来源于stack exchange,提问作者ed ei
相关产品推荐
相关产品推荐

