2015-09-17 55 views
0

我在DB中有以下表格。當沒有這樣的值時SQL選擇默認值

賬戶

User_id| first_name | last_name | age |   
    _______|_____________|____________|_________| 
    1 | LeBron | James | 28 | 
    2 | Kobe  | Bryent | 29 | 
    3 | Kevin | Durant | 30 | 
    4 | Jim  | Jones | 31 | 
    5 | Paul  | Pierce | 32 | 
    6 | Jeremy | Lin  | 33 | 

USER_BOOKMARK

User_id| Bookmarked_user_id 
    _______|____________________ 
    1 |  2   
    1 |  3  
    1 |  4 
    2 |  1   
    2 |  4  
    3 |  1 
    5 |  6   

我想從帳戶中選擇用戶的信息表,也不論他是否在我書籤列表

ex)勒布朗詹姆斯想知道林書豪的信息以及傑里米是否在書籤列表中。

期望的結果 =>

User_id| first_name | last_name | age | isBookmarked |  
    _______|_____________|____________|_________|______________|  
    6 | Jeremy |  Lin | 33 |  0  | =>0 means no. 

    *It must return only one row. 
    *If user is on my bookmark list, value of isBookmarked is my user_id. 

我試過=>

SELECT ACCOUNT.user_id, ACCOUNT.firstname, ACCOUNT.lastname, coalesce(User_Bookmark.user_id, 0) as isBookmarked 
FROM Account LEFT OUTER JOIN User_Bookmark ON Account.user_id = User_Bookmark.Bookmarked_user_id 
WHERE Account.user_id=6 AND User_Bookmark.user_id=1 

但此查詢返回零行......因爲我不是SQL專家,我承擔我錯過了一些東西。誰能幫我?

回答

1

User_Bookmark.user_id = 1測試正在過濾出不匹配的行,因爲當沒有匹配時該列將爲NULL。在執行LEFT JOIN時,必須將第二個表的條件放入ON子句中,而不是WHEN

SELECT ACCOUNT.user_id, ACCOUNT.firstname, ACCOUNT.lastname, coalesce(User_Bookmark.user_id, 0) as isBookmarked 
FROM Account 
LEFT OUTER JOIN User_Bookmark 
    ON Account.user_id = User_Bookmark.Bookmarked_user_id AND User_Bookmark.user_id=1 
WHERE Account.user_id=6 
+0

感謝您的超快速和完美的答案! – KimCrab