Postgresql:如果LEFT JOIN中的数据存在,则替换select中的参数



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

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

用户:id,first_name,last_name,电子邮件

我想通过SELECT获取所有邀请码和用户;如果邀请码有user_id(这意味着用户已经使用了它(,那么显示用户的first_name、last_name、电子邮件,而不是邀请码有什么(替换条件选择的内容(;如果邀请代码部分已经找到用户,则不再显示用户。目前,并非所有邀请代码都由用户使用。目前,我所做的是在两个不同的查询中选择"邀请代码"one_answers"用户",但这种方式不允许我构建分页器,因为我不知道每个页面中的每个表会有多少人,而且很难让他们不重复。

任何建议都会有帮助。

编辑:

样本数据:用户

[
{id: 1, first_name: 'User1', last_name: 'New1', email: 'email@email.com'},
{id: 2, first_name: 'User2', last_name: 'New2', email: 'email2@email.com'}
]

邀请代码

[
{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}
]

理想结果:

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

嗯。我想你想要:

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表覆盖。

最新更新