2

これはとても単純に見えますが、このクエリを実行する方法がわかりません。次のようなテーブルユーザーがいます。

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;

しかし、それは機能しません...このクエリを実行する正しい方法は何ですか?

4

3 に答える 3

2
 SELECT u.user_id ,name, role, NVL(projectId, 0) assigned
 FROM users u LEFT JOIN userprojects up ON (u.user_id = up.userid)
于 2010-10-19T12:29:39.537 に答える
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
于 2010-10-19T12:33:32.693 に答える
0

左外側の結合が必要です。booleanOracleにはデータ型がないことに注意してください。

于 2010-10-19T12:30:49.377 に答える