这看起来很简单,但我无法理解如何执行此查询: 我有一个像这样的用户表:
user_id | name | role
1 | abc | a
2 | lol | b
3 | f | c
和表usersprojects(包含用户和项目PK)
projectid | userid
1 | 1
1 | 2
2 | 2
2 | 3
如何选择所有用户列以及布尔列别名“已分配”到项目“1”
我想得到这样的结果:
user_id | name | role | assigned
1 | abc | a | true
2 | lol | b | true
3 | f | c | false
查询不会是这样的:
Select user_id ,name, role,
(users.user_id in (Select user_id from usersprojects where projectid=1)
) assigned;
但它不起作用......执行此查询的正确方法是什么?
答案 0 :(得分:2)
SELECT u.user_id ,name, role, NVL(projectId, 0) assigned
FROM users u LEFT JOIN userprojects up ON (u.user_id = up.userid)
答案 1 :(得分:2)
SELECT
user_id, name, role,
CASE WHEN (SELECT COUNT(*) FROM UsersProjects up #
WHERE up.user_id = u.user_id) > 0
THEN 'true' ELSE 'false' END assigned
FROM Users u
答案 2 :(得分:0)
您需要左外连接。请记住,Oracle中没有boolean
数据类型。