首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Postgresql:如果左连接中存在数据,则替换select中的参数

Postgresql:如果左连接中存在数据,则替换select中的参数
EN

Stack Overflow用户
提问于 2020-11-25 09:30:18
回答 1查看 33关注 0票数 1

目前我有两个表,如下所示:

邀请码: id,code,first_name,last_name,email,used,user_id

用户: id、first_name、last_name、email

我希望通过SELECT得到所有的邀请码和用户;如果邀请码有user_id (表示用户已经使用过),则显示用户的first_name、last_name、email而不是邀请码的内容(替换按条件选择的内容);如果通过邀请码部分找到用户,则不再显示用户。目前,并不是所有的邀请码都由用户使用。现在我所做的是在两个不同的查询中选择邀请代码和用户,但这种方式不允许我构建分页器,因为我不知道我将从每个页面中的每个表中获得多少人,并且很难保持它们不重复。

任何建议都会很有帮助。

编辑:

示例数据:用户

代码语言:javascript
复制
[
    {id: 1, first_name: 'User1', last_name: 'New1', email: 'email@email.com'},
    {id: 2, first_name: 'User2', last_name: 'New2', email: 'email2@email.com'}
]

InvitationCode

代码语言:javascript
复制
[
    {id: 1, user_id: 1, first_name: 'invited user1', last_name: 'invited user1', email:'email_new@email.com', used: true}, 
    {id: 2, user_id: null, first_name: 'invited user2', last_name: 'invited user2', email:'email_new2@email.com', used: false}
]

理想结果:

代码语言:javascript
复制
first_name | last_name | email | used | user_id | invitation_code_id 

User1 | New1 | email@email.com | true | 1 | 1

User2 | New2 | email2@email.com | null | 2 | null

invited user2 | invited user2 | email_new2@email.com | false | null | 2
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-25 09:47:45

嗯。。。我认为你想要:

代码语言:javascript
复制
select i.id, i.code, coalesce(i.last_name, u.last_name),
       coalesce(i.first_name, u.first_name), 
       coalesce(i.email, u.email),
       i.user_id
from invitation i left join
     user u
     on i.user_id = u.id;

这将提供所有的邀请,其中的字段被user表覆盖。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64997290

复制
相关文章

相似问题

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