gpt4 book ai didi

mysql - 外部和内部 SQL 连接

转载 作者:行者123 更新时间:2023-11-29 08:36:15 24 4
gpt4 key购买 nike

我在将多个 sql 语句合并为一个较大的单个语句时遇到问题。

问题:我有一个新闻源,需要返回登录用户关注的帐户中的所有帖子。我还需要将一个表与另外两个表连接起来,以获取发布在新闻提要上的帐户的用户名。我有 4 个表将用于此查询:

关注者(列出用户及其关注的帐户以及所关注的帐户类型)

重要列:[user_id、following_id、type]

用户(用户可以关注其他用户帐户)

重要列:[用户名]

服务器(用户还可以关注服务器帐户。请注意,用户的服务器是一对多,因为用户可以创建 0 个或多个与其帐户绑定(bind)的服务器)

重要列:[标题]

News_Posts(其中包含消息、帐户类型(整数)和 poster_id)

重要列:[poster_id、消息、类型]

我不知道如何获取当前登录用户的新闻帖子。

查询 1:根据“类型”返回具有正确用户名的完整新闻列表 0 = 用户,1 = 服务器

    SELECT news_posts.*, users.username FROM news_posts INNER JOIN users ON news_posts.poster_id=users.id WHERE news_posts.TYPE='0'

UNION

SELECT news_posts.*, servers.title FROM news_posts INNER JOIN servers ON news_posts.poster_id=servers.id WHERE news_posts.TYPE='1'

查询 2:返回特定用户(在本例中 ID 为 1)关注的帐户

    SELECT following_id, type FROM follower WHERE user_id='1'

如何将查询 1 与查询 2 结合起来,以便仅 news_post 记录 WHERE news_posts.poster_id = 查询 2 结果。它必须考虑关注者的类型,以便使用正确的用户名

编辑:这是该架构的粗略版本:http://sqlfiddle.com/#!2/a48f3/1

最佳答案

您要求提供 ID 为 1 的用户关注的帐户(用户或服务器)发布的所有新闻帖子。您需要有关这些帖子的所有信息以及发帖者的用户名或服务器标题。这是在 SQL 中,给定您的架构 ( also at sqlfiddle ):

select p.*,
account.username
from news_posts p
join
(
select id,
username,
0 as type
from users
union
select id,
title,
1 as type
from servers
) account
on (
account.id = p.poster_id
and account.type = p.type
)
join follower f
on (
f.following_id = account.id
and f.type = account.type
)
where f.user_id = 1

它的另一个好处是不会两次访问 news_posts 表。

关于mysql - 外部和内部 SQL 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15120354/

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