我们:3个表
关系一对一 - 用户 - 员工和用户 - 客户
示例数据:
问题:如何从这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 ...
答案 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