MySQL输出表中的所有记录,但如果另一个值存在则添加标志

时间:2014-05-12 03:41:14

标签: mysql sql

我正在尝试填充一个自动填充选择字段,该字段需要显示所有用户,但在当前俱乐部的俱乐部表格中添加一个标记。

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

我不知道为什么这让我大吃一惊......

5 个答案:

答案 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

SQL Fiddle DEMO

答案 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