首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >MySQL:连接两个表值-一个表存储用户键值和其他存储缺省值

MySQL:连接两个表值-一个表存储用户键值和其他存储缺省值
EN

Stack Overflow用户
提问于 2018-06-09 03:13:19
回答 1查看 67关注 0票数 1

我有两个表,我正在尝试加入。

包含用户id和键及其值的主表

代码语言:javascript
复制
id   | user_id | fk_id |   value  
---------------------------
12   |   1     |   1   |   "0"
13   |   1     |   2   |   "1"
15   |   1     |   3   |   "1"
16   |   2     |   1   |   "0"  

现在我有了另一个表,其中存储了缺省键及其值:

代码语言:javascript
复制
id   | fk_id |   value  
-----------------------
10   |   1   |   "1"
11   |   2   |   "0"
12   |   3   |   "1"
13   |   4   |   "0"

我想要从不是由用户设置的默认表中获取值,它的输出应该如下所示:

代码语言:javascript
复制
user_id | fk_id |   value  
---------------------------
1       |   1   |   "0"
1       |   2   |   "1"
1       |   3   |   "1"
1       |   4   |   "0"
2       |   1   |   "0" 
2       |   2   |   "0"
2       |   3   |   "1"
2       |   4   |   "0"

实际上,我可以通过使用UNION为单用户执行此操作,但我希望为多个用户实现,如果他们没有设置任何键值,则需要从默认表中获取键值。

那么,如果没有设置key的值,如何编写查询来获取默认值和用户id呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-09 03:15:28

使用cross join生成行(用户和默认值的所有组合),然后使用left join引入默认值。

这看起来像这样:

代码语言:javascript
复制
select u.user_id, d.fk_id, coalesce(m.value, d.value) as value
from (select distinct user_id from main) u cross join
     defaults d left join
     main m
     on m.user_id = u.user_id and m.fk_id = d.fk_id;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50767102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档