SQL嵌套查询指定字段失效,如何替换(*)实现相同效果?
解决方案
你不需要在FROM子查询里选择pizzeria_name或person_name,这两个字段并不属于person_visits表,它们是外层通过子查询从person和pizzeria表中获取的。
原查询中FROM子查询的SELECT *实际取了person_visits的所有字段,但外层仅用到其中的person_id和pizzeria_id来关联获取名称。因此只需将SELECT *替换为SELECT person_id, pizzeria_id,就能得到与原查询完全一致的结果:
SELECT ( SELECT person.name FROM person WHERE person.id = pv.person_id ) AS person_name, ( SELECT pizzeria.name FROM pizzeria WHERE pizzeria.id = pv.pizzeria_id ) AS pizzeria_name FROM ( SELECT person_id, pizzeria_id FROM person_visits WHERE visit_date BETWEEN '2022-01-07' AND '2022-01-09' ) AS pv ORDER BY person_name ASC, pizzeria_name DESC;
补充说明
你之前尝试的pizzeria.id、pv.pizzeria_id写法无效,原因是FROM子查询基于person_visits表,该表仅包含person_id、pizzeria_id、visit_date字段(对应表结构),不存在pizzeria表的字段。名称的获取逻辑已经由外层的两个标量子查询完成,子查询只需提供关联所需的person_id和pizzeria_id即可。
内容的提问来源于stack exchange,提问作者Evgeny Step
相关产品推荐
相关产品推荐

