Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
185 views
in Technique[技术] by (71.8m points)

sql - Selecting 2 tables

How to select an attribute from another table with the original table

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You should fix the data model. You should have three tables:

  • users: one row per users
  • groups: one row per groups
  • user_groups: one row per user/group combination

With your data model, I would use arrays to unpivot the values and then reaggregate:

I prefer arrays to JSON, so I would use:

select ug.type,
       (select array_agg(u.name)
        from (unnest(array[ug.user_1, ug.user_2, ug.user_3])) ar(user_id) join
             users u
             on u.user_id = u.id
       ) as users
from user_groups ug;

You can use a JSON function if you really want JSON.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...