sql中带有无效标识符错误的子查询
Posted
技术标签:
【中文标题】sql中带有无效标识符错误的子查询【英文标题】:Subquery with invalid identifier error in sql 【发布时间】:2013-05-29 22:56:04 【问题描述】:要提前选择旅游日期和站点名称,总费用超过 230 且该旅游超过 7 人。完整的代码如下,联合工作的第一部分。
SELECT tour_date AS "Departure Date", site_name "Site Name"
FROM partres, reservation, tour, site
WHERE partres.res_id = reservation.res_id
AND reservation.tour_id = tour.tour_id
AND tour.site_id = site.site_id
GROUP BY tour_date, site_name
HAVING COUNT(part_id) > 7
UNION
SELECT tour_date AS "Departure Date", site_name "Site Name"
FROM (
SELECT res_id,tour_date,site_name, (res_partcost +NVL(RES_GEARCOST,0)) as "total_cost"
FROM reservation,site,tour)
WHERE reservation.tour_id = tour.tour_id
AND tour.site_id = site.site_id
AND total_cost > 230
GROUP BY tour_date, site_name;
我仍然遇到错误
ORA-00904: "TOTAL_COST": invalid identifier
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:
Error at Line: 437 Column: 7
谢谢
【问题讨论】:
认为您忘记将 total_cost 放入第一个 SELECT 语句 你想完成什么?内部查询没有 where 子句,因此您没有按任何条件加入表。字段 reservation.*、tour.* 和 site.* 在您的内部查询之外不可用。 想提前选择旅游日期和地点名称,总费用超过230,而且旅游人数超过7人。 【参考方案1】:您需要在子查询中移动连接条件
SELECT tour_date AS "Departure Date", site_name "Site Name"
FROM (
SELECT res_id,tour_date,site_name, (res_partcost +NVL(RES_GEARCOST,0)) as "total_cost"
FROM reservation,site,tour
WHERE reservation.tour_id = tour.tour_id
AND tour.site_id = site.site_id ) Res1
WHERE Res1.total_cost > 230 // this will not be displayed in a result
GROUP BY tour_date, site_name;
【讨论】:
【参考方案2】:union
不会在条件之间给出“和”。它会给你一个“或”(因为任何符合任一条件的都将被包括在内)。
我认为您应该将其表述为带有子查询的单个查询。此外,正确的连接语法也是一个好处:
SELECT tour_date AS "Departure Date", site_name "Site Name"
FROM partres p join
reservation r
on p.res_id = r.res_id join
tour t
on r.tour_id = t.tour_id and
(res_partcost + coalesce(RES_GEARCOST,0)) > 230 join
site s
on t.site_id = s.site_id
GROUP BY tour_date, site_name
having COUNT(part_id) > 7;
此版本猜测total_cost
在reservation
表中。
【讨论】:
以上是关于sql中带有无效标识符错误的子查询的主要内容,如果未能解决你的问题,请参考以下文章
SQL 错误:ORA-00904: : 第 4 行中的标识符无效
错误报告:SQL 错误:ORA-00904::无效标识符 00904。00000 - “%s:无效标识符”
Sql 错误 00904. 00000 - “%s: 无效标识符”
避免 ORA-00904 - 在 java 中进行 sql 查询时出现无效标识符错误,因为该列可能会或可能不会在数据库中预设