[英]Having trouble creating set-based query to create table data instead of doing it procedurally
給定具有唯一鍵id
+ appId
表settings
ID | 應用程序ID | 名稱 |
---|---|---|
1 | 應用程序1 | 設置1 |
2 | 應用程序1 | 設置2 |
我創建了新條目,表格看起來像這樣
ID | 應用程序ID | 名稱 |
---|---|---|
1 | 應用程序1 | 設置1 |
2 | 應用程序1 | 設置2 |
3 | 應用程序2 | 設置1 |
4 | 應用程序2 | 設置2 |
然后給定表user_settings
將設置連接到用戶
用戶身份 | 設置 ID |
---|---|
1 | 1 |
1 | 2 |
2 | 1 |
我需要將為app2
添加的所有新設置添加到當前具有app1
設置的每個用戶。 用戶應該只獲取具有匹配name
的設置。
我不知道這是否清楚,所以我也會這樣說:如果用戶對app1
有一個給定name
的設置,那么它應該為app2
獲取具有相同name
的設置。
有沒有辦法用基於集合的查詢來做到這一點? 或者我是否按程序執行此操作? 不幸的是,我不太擅長但基本的 SQL。
所以user_settings
表最終應該是
用戶身份 | 設置 ID |
---|---|
1 | 1 |
1 | 2 |
2 | 1 |
1 | 3 |
1 | 4 |
2 | 3 |
感謝您的任何幫助。
這是您的方法:
select us.userid , s2.id
from user_settings us
join settings s1
on s1.appid = 'app1'
and us.settingsId = s1.id
join settings s2
on s2.appid = 'app2'
and s2.name = s1.name
您可以使用相同的查詢插入到您的表中。 db<> 在這里擺弄
您需要的insert
語句確實可以在單個語句中完成,這樣的一種方式是
insert into user_settings (userid, settingsid)
select u.userid, s2.Id
from user_settings u
join settings s on s.id=u.settingsid
join settings s2 on s2.name=s.name
where s2.appid='app2' and s.appid='app1'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.