假设有一个名为 people 的表,其中包含以下列:
- person_id
- 姓名
- parent_person_id
我正在尝试编写一个查询以返回以下内容:
- person.person_id 作为“id”
- person.name 作为“姓名”
- person.parent_person_id 作为“父 ID”
- 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/