我有两个表,我正在尝试加入。
包含用户id和键及其值的主表
id | user_id | fk_id | value
---------------------------
12 | 1 | 1 | "0"
13 | 1 | 2 | "1"
15 | 1 | 3 | "1"
16 | 2 | 1 | "0"
现在我有了另一个表,其中存储了缺省键及其值:
id | fk_id | value
-----------------------
10 | 1 | "1"
11 | 2 | "0"
12 | 3 | "1"
13 | 4 | "0"
我想要从不是由用户设置的默认表中获取值,它的输出应该如下所示:
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呢?
发布于 2018-06-09 03:15:28
使用cross join
生成行(用户和默认值的所有组合),然后使用left join
引入默认值。
这看起来像这样:
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;
https://stackoverflow.com/questions/50767102
复制相似问题