从mysql中的多个表中返回带有条件的多个数据

时间:2014-10-16 21:53:17

标签: mysql sql

我遇到了在MySQL中使用某些条件从多个表中获取数据的问题。

我有三张桌子:

   Like Table

   Like_id  photoID  userID
         1        1       1
         2        2       2
         3        2       1


   BookMark Table

   bookmark_id  photoID  userID
             1        1       1
             2        2       2
             3        2       1


   Users Table

   User_id  Name       Email
         1  Max B      maxb@gmailcom
         2  Tom Smith  toms@gmailcom

条件:

首先,我想检查LIKE表中是否存在userID = 2的任何数据。如果没有数据则返回“false”,否则返回“true”。

同样,我想检查BOOKMARK表中是否存在userID = 2的任何数据。如果没有数据则返回“false”,否则返回“true”。

最后,我想从USERS表中获取userID = 2的名称和电子邮件。

WANTED:

我希望在这三个表中使用上述条件在 SINGLE QUERY 中实现所有这些信息。

SO FAR尝试使用此QUERY:

   select Like.Like_id from (Like left join Users on Like.userID = Users.User_id) 
   left join BookMark on Users.User_id = BookMark.bookmark_id 
   where Users.User_id = 2

@Gervs的建议:

SELECT
u.user_id,
u.name,
u.email,
(CASE WHEN ISNULL(l.user_id) THEN 'false' ELSE 'true' END) AS 'likes',
(CASE WHEN ISNULL(b.user_id) THEN 'false' ELSE 'true' END) AS 'bookmarks'
FROM 
 users u
LEFT JOIN
  likes l
  ON u.user_id = l.user_id
LEFT JOIN
 bookmarks
 ON u.user_id = b.user_id
 WHERE u.user_id = 2
 GROUP BY u.user_id

获取这些信息的最简单但有效的单一查询是什么? VIEW是否是这些条件的最佳选择?

感谢您的参与。

1 个答案:

答案 0 :(得分:2)

您可以在用户表上进行内部联接,例如表和书签表,也就是说您只想要在两个表中都有条目的用户。

SELECT
    u.user_id,
    u.name,
    u.email,
    COUNT(l.user_id) likes,
    COUNT(b.user_id) bookmarks
FROM 
    users u
JOIN
    likes l
    ON u.user_id = l.user_id
JOIN
   bookmarks b
    ON u.user_id = b.user_id
WHERE u.user_id = 2
GROUP BY u.user_id

如果您一直想要用户,只需将内部联接更改为左联接和喜欢和/或书签,如果没有找到任何条目将为零

SELECT
    u.user_id,
    u.name,
    u.email,
    CASE WHEN COUNT(l.user_id) > 0 THEN 'true' ELSE 'false' END likes,
    CASE WHEN COUNT(b.user_id) > 0 THEN 'true' ELSE 'false' END bookmarks
FROM 
    users u
LEFT JOIN
    likes l
    ON u.user_id = l.user_id
LEFT JOIN
    bookmarks b
    ON u.user_id = b.user_id
WHERE u.user_id = 2
GROUP BY u.user_id