2015-11-03 57 views
0

我有以下SQL查詢:選擇命令,其中一個字段必須等於一個值,但另一場可以有2個值

SELECT users.user_id, 
     users.first_name, 
     users.last_name, 
     roles.role, 
     roles.role_id, 
     users.username, 
     users.description, 
     users_vs_teams.team_id, 
     teams.team_name, 
     teams.status, 
     teams.notes 
FROM teams 
    INNER JOIN users_vs_teams ON teams.team_id = users_vs_teams.team_id 
    RIGHT OUTER JOIN users ON users_vs_teams.user_id = users.user_id 
    INNER JOIN roles ON users.role_id = roles.role_id 
WHERE(users.role_id = 3) AND (teams.status = 'Completed') OR (teams.status IS NULL) 

我欲與君3一個role_idteam.status,只顯示用戶可以是CompletedNULL。然而,這個查詢顯示的所有角色,其中teams.status或者是CompletedNULL。任何幫助解決這個問題將不勝感激。

+0

你在你的'RIGHT OUTER JOIN'不正確的加入,你沒有加入IDS,一些郎'ON SOME_ID = some_id' – Japongskie

回答

1

首先,我不知道,如果你需要一個外連接這一點。其次,你的問題似乎是WHERE子句中括號:

SELECT u.user_id, u.first_name, u.last_name, r.role, r.role_id, 
     u.username, u.description, uvt.team_id, 
     t.team_name, t.status, t.notes 
FROM teams t INNER JOIN 
    users_vs_teams uvt 
    ON t.team_id = uvt.team_id INNER JOIN 
    users u 
    ON uvt.user_id = u.user_id 
    roles r 
    ON u.role_id = r.role_id ON u 
WHERE (u.role_id = 3) AND (t.status = 'Completed' OR t.status IS NULL) 

注意,表的別名使查詢更容易編寫和閱讀。

0

取出RIGHT OUTER JOIN和解決您的括號中的WHERE clause

SELECT users.user_id, 
     users.first_name, 
     users.last_name, 
     roles.role, 
     roles.role_id, 
     users.username, 
     users.description, 
     users_vs_teams.team_id, 
     teams.team_name, 
     teams.status, 
     teams.notes 
FROM teams 
    INNER JOIN users_vs_teams ON teams.team_id = users_vs_teams.team_id 
    INNER JOIN users ON users_vs_teams.user_id = users.user_id 
    INNER JOIN roles ON users.role_id = roles.role_id 
WHERE(users.role_id = 3) AND (teams.status = 'Completed' OR teams.status IS NULL) 

你也可以做這樣的事情:

(teams.status = 'Completed' OR ISNULL(teams.status,'') = '') 
相關問題