0

这是我的查询。v.location 是一个包含楼层和房间信息的列,即 FL 2 RM 204。我需要将它与 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

4

2 回答 2

1

您的 where 子句肯定有问题,因为您需要测试 floor 字段和 room 字段是否为 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;

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

于 2013-01-22T16:59:26.947 回答
1

您正在混合使用 oracle 连接语法和 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 子句也是完全错误的,因为它永远不能为空。

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

您是否打算返回“V”中没有匹配行的行?

于 2013-01-22T17:01:35.127 回答