我正在尝试填充一个自动填充选择字段,该字段需要显示所有用户,但在当前俱乐部的俱乐部表格中添加一个标记。
Users
user_id | first_name | last_name
--------------------------------
1 | Bob | Smith
2 | Lisa | Someone
3 | Bill | Green
4 | Jane | Hill
Club
club_id | user_id
-----------------
1 | 2
2 | 1
2 | 4
当我在俱乐部" 2"
的背景下寻找所有用户时,我需要输出1 | Bob | Smith | TRUE
2 | Lisa | Someone |
3 | Bill | Green |
4 | Jane | Hill | TRUE
我不知道为什么这让我大吃一惊......
添
答案 0 :(得分:0)
我原本误解了你的问题,抱歉。这就是你要找的东西:
select u.user_id, u.first_name, u.last_name,
case when c.club_id is not null then true end as flag
from users u
left join club c on (u.user_id=c.user_id and c.club_id=2)
答案 1 :(得分:0)
像
这样的东西SELECT *,
CASE
WHEN EXISTS(SELECT 1 FROM Club c WHERE c.user_id = u.user_id)
THEN 'TRUE'
ELSE NULL
END FlagValue
FROM users u
答案 2 :(得分:0)
您可以使用left outer join
:
select u.user_id, u.first_name, u.last_name,
(c.club_id = 2) as flag
from users u left join
club c
on u.user_id = c.user_id;
请注意,flag
的值为0
(false)或1
(true)。如果您想要该标志的其他值,则需要使用case
语句。
编辑:
如果您只是想要每个用户的标志,那么最简单的方法是:
select u.*,
exists (select 1 from club c where u.user_id = c.user_id and c.club_id = 2) as flag
from users u;
再一次,这会产生0/1标志。如果您想要一个不同的值,那么它需要进入case
。
或者,您可以使用:
select u.user_id, u.first_name, u.last_name,
(c.user_id is not null) as flag
from users u left join
club c
on u.user_id = c.user_id and c.club_id = 2
答案 3 :(得分:0)
select u.user_id, u.first_name, u.last_name
, case when c.user_id is not null then 'TRUE' else '' end
from users u
left join club c
on u.user_id = c.user_id
and c.club_id = 2
order by u.user_id
答案 4 :(得分:0)
为了清楚你的问题陈述,我创建了表并插入了数据 -
create table users (user_id bigint not null, first_name varchar(100), last_name varchar(100));
create table club (club_id bigint not null, user_id bigint not null);
insert into users values (1, 'Bob','Smith');
insert into users values (2, 'Lisa','Someone');
insert into users values (3, 'Bill','Green');
insert into users values (4, 'Jane','Hill');
insert into club values (1, 2);
insert into club values (2, 1);
insert into club values (2, 4);
这是我跑的查询 -
select users.user_id, users.first_name, users.last_name,
case when club.club_id = 2 then 'TRUE' end as flag
from users left join club on users.user_id = club.user_id;
这是输出 -
1 Bob Smith TRUE
2 Lisa Someone NULL
3 Bill Green NULL
4 Jane Hill TRUE