当没有这样的值

时间:2015-09-17 00:25:12

标签: mysql left-join coalesce

我在DB中有以下表格。

帐户

  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        

我想从 ACCOUNT 表中选择用户的信息,以及该人是否在我的书签列表中

ex) Lebron James想知道Jeremy Lin的信息以及Jeremy是否在他的书签列表中。

期望的结果 =>

  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 个答案:

答案 0 :(得分: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