我遇到了在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是否是这些条件的最佳选择?
感谢您的参与。
答案 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