2010-10-19 57 views
2

這看起來很簡單,但我不明白我怎麼做這個查詢: 我有一個表的用戶是這樣的:列別名的Oracle 10g

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; 

但它不工作...什麼是做這個查詢的正確方法?

回答

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 
+0

這個解決了,我只需要做一個改變:「... WHERE up.user_id = u.user_id AND up.projectid = 1 ...「 – AndreDurao 2010-10-19 12:43:25

2
SELECT u.user_id ,name, role, NVL(projectId, 0) assigned 
FROM users u LEFT JOIN userprojects up ON (u.user_id = up.userid) 
+0

這將產生重複的用戶記錄,當他們被分配到多個項目,這可能不是OP想要的。 – 2010-10-19 12:31:14

+0

確切地說,我試過了,它顯示了所有的用戶和他們分配的項目...... – AndreDurao 2010-10-19 12:36:42

0

您需要一個左外連接。請記住,Oracle中沒有boolean數據類型。