SQL:JOIN表中的CASE

时间:2017-01-17 00:35:57

标签: sql join case

我们:3个表

  • users {id,role_id}
  • staff {user_id}
  • clients {user_id}

关系一对一 - 用户 - 员工和用户 - 客户

示例数据

users_tableclient_table

问题:如何从这3个表中选择数据? 如果 users.role_id = 4 客户加入,则从员工加入。我可以这样做吗?

我尝试

SELECT "users" JOIN CASE WHEN users.role_id IN (4) THEN 'clients' ELSE 'staff' ON "users"."role_id" IN (4) THEN 'clients' ELSE 'staff'.user_id = users.id

但有错误

  

错误:语法错误在或附近" JOIN"第2行:当users.role_id IN(4)然后'客户'加入案例。 ELSE' sta ...

2 个答案:

答案 0 :(得分:1)

这是你想要的吗?

SELECT u.*,
       (CASE WHEN users.role_id IN (4) THEN 'clients' ELSE 'staff' END) as role
FROM users u
WHERE u."role_id" IN (4);

以上作品。但是如果您的表有其他列,您可能需要:

select u.*,
       (case when c.user_id is not null then 'client' else 'staff' end)
from users u left join
     clients c
     on u.role_id = 4 and c.user_id = u.id left join
     staff s
     on u.role_id <> 4 and s.user_id = u.id;

答案 1 :(得分:0)

您可以使用两个查询,然后使用UNION ALL来合并结果:

SELECT
    <columns>
FROM users AS u
INNER JOIN clients AS c
    ON c.user_id = u.id
WHERE u.role_id = 4

UNION ALL

SELECT
    <columns>
FROM users AS u
INNER JOIN staff AS s
    ON s.user_id = u.id
WHERE u.role_id <> 4