列别名oracle 10g

时间:2010-10-19 12:26:34

标签: sql oracle oracle10g oracle-xe

这看起来很简单,但我无法理解如何执行此查询: 我有一个像这样的用户表:

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;

但它不起作用......执行此查询的正确方法是什么?

3 个答案:

答案 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数据类型。