目前我有两个表,如下所示:
邀请码: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
表覆盖。