簡體   English   中英

簡單的聯接表為每一行分配默認值(包括SQL Fiddle)

[英]Simple join table assigning default values for each row (sql fiddle included)

我敢肯定這個問題有一個非常簡單的答案,但是我很難找到它。

我有一個表,其中包含屬於用戶的設置。

| user_id | setting  | value  |     
-------------------------------     
| 1       | paying?  | true   |     
| 2       | paying?  | false  |     
| 2       | demo?    | true   |     
| 2       | active?  | true   |

我還有一個帶有默認設置的表,以防特定用戶不存在該設置。

| setting  | value  |
---------------------
| paying?  | true   |
| demo?    | true   |
| active?  | false  |
| hidden?  | false  |

我需要做的是返回每個用戶的所有設置(僅當沒有分配給該用戶時才使用默認設置):

| user_id | category | value  |
-------------------------------
| 1       | paying?  | true   |
| 1       | demo?    | true   |
| 1       | active?  | false  |
| 1       | hidden?  | false  |
| 2       | paying?  | false  |
| 2       | demo?    | true   |
| 2       | active?  | true   |
| 2       | hidden?  | false  |

此聯接不會為每個用戶返回結果。 我究竟做錯了什么?

SELECT u.user_id, COALESCE(u.category, g.category) as category, COALESCE(u.value, g.value) as value
FROM user_settings as u
FULL OUTER JOIN global_settings as g on u.category = g.category
ORDER BY u.user_id, u.category

SQLFiddle在這里

將具有global_settings的不同用戶交叉連接,然后將user_settings表左連接到此。

SELECT u.user_id, COALESCE(us.category, g.category) as category,
COALESCE(us.value, g.value) as value
FROM (select distinct user_id from user_settings) as u
cross join global_settings g
left join user_settings as us on us.category = g.category and us.user_id=u.user_id
order by 1,2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM