运行以下代码时收到语法错误
42601:“。”或附近的语法错误。
我认为这与别名有关,但是我看不出问题出在哪里。
SELECT * FROM (
SELECT
m.shipment_id
m.route_id,
m.leg_sequence_id,
m.leg_warehouse_id,
m.leg_ship_method,
row_number() over (partition by m.route_id order by m.leg_sequence_id desc) as rn
FROM posimorders.sc_execution_eu.o_detailed_routes_v2 m
)
WHERE rn=1
LIMIT 100;
答案 0 :(得分:2)
您的代码包括:
SELECT * FROM (
SELECT
m.shipment_id
m.route_id,
...
m.shipment_id
后缺少逗号,因此它试图将m.route_id
解释为货件ID的列别名,这不是您想要的;别名是单个标识符,而不是点分隔的层次结构。因此,您看到的错误虽然不是来自Oracle本身-您的客户端似乎首先在解析它。
Oracle还不支持LIMIT
,但是从12c开始它具有a row-limiting clause,您可以改用:
SELECT * FROM (
SELECT
m.shipment_id,
m.route_id,
m.leg_sequence_id,
m.leg_warehouse_id,
m.leg_ship_method,
row_number() over (partition by m.route_id order by m.leg_sequence_id desc) as rn
FROM posimorders.sc_execution_eu.o_detailed_routes_v2 m
)
WHERE rn=1
FETCH FIRST 100 ROWS ONLY;
或WITH TIES
(如果您愿意)。
posimorders.sc_execution_eu.o_detailed_routes_v2
中的三个级别也似乎是错误的... see the docs。