gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 07:51:04 25 4
gpt4 key购买 nike

我在 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 的名称和电子邮件。

通缉:

我想通过这三个表中的上述条件在单个查询中获取所有这些信息。

到目前为止尝试过此查询:

   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 是否是这些条件的最佳选择?

非常感谢您的参与。

最佳答案

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

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

关于mysql - 从mysql中的多个表中返回有条件的多条数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26414554/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com