mysql - 如何在 SQL 的子查询中引用父查询中的表列?

标签 mysql sql database

假设有一个名为 people 的表,其中包含以下列:

  1. person_id
  2. 姓名
  3. parent_person_id

我正在尝试编写一个查询以返回以下内容:

  1. person.person_id 作为“id”
  2. person.name 作为“姓名”
  3. person.parent_person_id 作为“父 ID”
  4. person.label(来自父查询的 person.person_id = person.person_parent_id)作为“父名称”。

我在处理项目编号 4 子查询时遇到困难。

我的问题是:

如何在子查询中引用父查询中的 person.person_parent_id?我觉得在下面的代码中,如果我可以从外部查询中获取 people.parent_person_id 值并将其用于内部查询,我将实现我的目标。

SELECT
    people.person_id as 'Person ID',
    people.name as 'Person Name',
    people.parent_person_id as 'Parent ID',
    (
        SELECT
            people.name
        FROM
            people
        WHERE
            people.parent_person_id = people.person_id;
    ) as 'Parent Name'
FROM 
    people;

我可能是错的,而且我绝对是开放的。请分享您的想法,帮助这个善良的灵魂继续他的追求。

最佳答案

你很接近。您只需要适当的表别名:

SELECT p.person_id as PersonID,
       p.name as PersonName,
       p.parent_person_id as ParentID,
       (SELECT parent.name
        FROM people parent
        WHERE p.parent_person_id = parent.person_id;
       ) as ParentName
FROM people p;

注意事项:

  • 这通常表示为 LEFT JOIN,但相关子查询也是一种非常合理的方法。
  • 请注意,使用表别名更容易执行查询 - 在这种情况下您需要它们。
  • 不要养成对列名使用单引号的习惯。这通常会造成混淆,并可能导致难以找到错误。
  • 您的版本不起作用,因为在条件 people.parent_person_id = people.person_id 中,people 指的是内部 from。您需要表别名来区分对 people 的内部和外部引用。

关于mysql - 如何在 SQL 的子查询中引用父查询中的表列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33848964/

相关文章:

mysql - 插入 MYSQL 时自动初始化 GETDATE()

php - pdo prepare SELECT execute 导致 ErrorCode 42000

mysql - 如何加快大多数 Joomla 1.5 mod_mostcomment 的 mysql 查询速度

php - 通过mysql查询使用公式: error

database - CodeIgniter 多站点设置

php - 将mysql数据库中的行分成不同的变量

mysql - SQL,如何将一个表的所有行插入到另一个表中

java - 在 JDBC 中设置语句提取大小或使用 LIMIT 子句触发 SQL 查询有什么区别?

mysql - 为什么我从这个 SQL 查询中得到错误的结果?

mysql - 设置外键的默认值?