使用连接连接比较时无效的标识符

时间:2013-01-22 16:53:00

标签: sql oracle plsql

这是我的查询。 v.location是一个包含楼层和房间信息的列,即FL 2 RM 204.我需要将它与mv_rooms表进行比较,mv_rooms表将房间和楼层分成两个单独的列。

select v.location, v.customer_name, v.street_name
from voip_validate v, mv_rooms r, mv_buildings b
left outer join voip_validate
on v.location = 'FL ' || r.floor || ' RM ' || r.room
where 'FL ' || r.floor || ' RM ' || r.room is null
and b.dps_number = r.dps_number;

当我运行查询时,我收到错误:

ORA-00904:“R”。“ROOM”:标识符无效 00904. 00000 - “%s:无效标识符” *原因:
*行动: 行错误:4列:47

2 个答案:

答案 0 :(得分:1)

你的where子句肯定有问题, 因为你需要测试楼层字段和房间字段是否为NULL,而不是整个字符串。

select v.location, v.customer_name, v.street_name
from voip_validate v, mv_rooms r, mv_buildings b
left outer join voip_validate
on v.location = 'FL ' || r.floor || ' RM ' || r.room
where (r.floor is null or r.room is null)
and b.dps_number = r.dps_number;

可能存在楼层和/或房间是整数数据类型的问题。将它们转换为字符串。

答案 1 :(得分:1)

你正在混合oracle join语法和ANSI。

select v.location, v.customer_name, v.street_name
  from voip_validate v
       left outer join mv_rooms r
                    on v.location = 'FL ' || r.floor || ' RM ' || r.room
       left outer join mv_buildings b
               on b.dps_number = r.dps_number
 where r.room is null

你的where子句也是完全错误的,因为它永远不会为null。

where 'FL ' || r.floor || ' RM ' || r.room is null

你打算在“V”中返回没有匹配行的行吗?