当前位置: 首页 > 面试题库 >

如何在MySQL的子查询中指定父查询字段?

谭飞掣
2023-03-14
问题内容

有没有办法从mySQL的子查询中指定父查询字段?

例如:
我已经用PHP编写了一个基本的公告板类型程序。

在数据库中,每个帖子都包含:id(PK)和parent_id(父帖子的ID)。如果帖子本身是父项,则其parent_id设置为0。

我正在尝试编写一个mySQL查询,该查询将查找每个父级帖子以及父级拥有的子级数。

$query = "SELECT id, (
      SELECT COUNT(1) 
      FROM post_table 
      WHERE parent_id = id
) as num_children
FROM post_table
WHERE parent_id = 0";

棘手的是,第一个 ID 不知道它应该引用子查询之外的第二个 ID 。我知道我可以执行SELECT id AS
id_tmp,然后在子查询中引用它,但是如果我还想返回ID并保持“ id”作为列名,那么我就必须执行一个返回我两列具有相同的数据(对我来说似乎很混乱)

$query = "SELECT id, id AS id_tmp, 
            (SELECT COUNT(1)
            FROM post_table
            WHERE parent_id = id_tmp) as num_children
         FROM post_table
         WHERE parent_id = 0";

凌乱的方式很好用,但是我感到有机会在这里学习一些东西,所以我想我应该提出这个问题。


问题答案:

怎么样:

$query = "SELECT p1.id, 
                 (SELECT COUNT(1) 
                    FROM post_table p2 
                   WHERE p2.parent_id = p1.id) as num_children
            FROM post_table p1
           WHERE p1.parent_id = 0";

或者,如果您在p1.id上放置一个别名,您可能会说:

$query = "SELECT p1.id as p1_id, 
                 (SELECT COUNT(1) 
                    FROM post_table p2 
                   WHERE p2.parent_id = p1.id) as num_children
            FROM post_table p1
           WHERE p1.parent_id = 0";


 类似资料:
  • 您可以看到,子查询中没有使用协议实体路径a1的别名,而是被协议实体路径A2的别名所取代。在querydsl中还需要做一些其他的事情才能生成这个查询吗?

  • 前面我们介绍了如何使用 SELECT、INSERT、UPDATE 和 DELETE 语句对 MySQL 进行简单访问和操作。下面在此基础上开始学习子查询。 子查询是 MySQL 中比较常用的查询方法,通过子查询可以实现多表查询。 子查询指将一个查询语句嵌套在另一个查询语句中。子查询可以在 SELECT、UPDATE 和 DELETE 语句中使用,而且可以进行多层嵌套。在实际开发时,子查询经常出现在

  • 通常情况,我们不需要获取数据表的所有字段内容,而是部分字段。那么使用语句如下: $Model->field('id,title')->select();

  • 问题内容: 谁能看到以下查询出了什么问题? 当我运行它时,我得到: #1064-您的SQL语法有误;检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在第8行的’a where a.CompetitionID = Competition.CompetitionID’附近使用 问题答案: 主要问题是内部查询不能与外部语句上的子句相关,因为在内部子查询执行之前,where过滤器首先应用于要

  • 问题内容: 如标题所述,我想要一个解决方法… 干杯 问题答案: 您可能会希望将an添加到嵌套查询中。

  • 问题内容: 我正在阅读elasticsearch的文档,此[page] [1]讨论了使用将孩子映射到父类型。 如果我有被称为孩子的父母,则被称为: 每种类型的字段: 我怎么能在搜索领域和领域的前提是的是? 有没有办法让父母拥有的所有孩子(某种类型或任何类型)? 在索引子文档时,是否可以将父对象作为对象属性传递给JSON数据,而不是将其作为查询字符串的一部分? 在尝试了imotov的建议之后,我想到