gpt4 book ai didi

mysql - 如何使用条件和限制正确编写mysql subselect

转载 作者:行者123 更新时间:2023-11-29 02:00:25 26 4
gpt4 key购买 nike

我有三个表:

帖子:id, title, authorId, text

作者:id, 名字, 国家

评论:id, authorId, text, postId

我想运行一个 mysql 命令,该命令选择前 5 篇由国家/地区为“爱尔兰”的作者撰写的帖子。在同一个调用中,我想检索这五个帖子的所有评论,以及作者信息。

我试过以下方法:

SELECT posts.id as 'posts.id', posts.title as 'posts.title'  (etc. etc. list all fields in three table)
FROM
(SELECT * FROM posts, authors WHERE authors.country = 'ireland' AND authors.id = posts.authorId LIMIT 0, 5 ) as posts
LEFT JOIN
comments ON comments.postId = posts.id,
authors
WHERE
authors.id = posts.authorId

我必须在每个字段中包含一个别名 ^,因为 id 有重复项,而且将来更多字段可能会重复,因为我正在寻找通用解决方案。

我的两个问题是:

1) 我从我的 id 子选择中得到一个重复的字段条目,所以我必须在子选择中再次列出我的所有字段作为别名,还是只有一个字段我需要一个子选择

2) 有没有办法为我的电话自动取别名?目前,我刚刚为主选择中的每个字段添加了别名,但它可以为我执行此操作以便没有重复项吗?

抱歉,如果这不是很清楚,这是一个有点困惑的问题!谢谢。

最佳答案

您正在对查询中的 author 表进行不必要的连接。您可以在 posts 子查询中获得所需的所有字段。我会将其重命名为现有表以外的其他名称,可能是 pa 以指示帖子和作者。

您说您想要前 5 个帖子,但没有顺序条款。一种更好的查询形式是:

SELECT pa.id as 'posts.id', pa.title as 'posts.title'  (etc. etc. list all fields in three table)
FROM (SELECT *
FROM posts join
authors
on authors.id = posts.authorId
WHERE authors.country = 'ireland'
order by post.date
LIMIT 0, 5
) pa LEFT JOIN
comments c
ON c.postId = pa.id

请注意,这将返回前五个帖子及其作者(如问题中指定)。但一位作者可能负责所有五篇文章。

在 MySQL 中,您可以使用 * 它将去除 from 子句中的重复别名。我认为这很危险。最好列出所有你想要的列。

关于mysql - 如何使用条件和限制正确编写mysql subselect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16303999/

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