【发布时间】:2015-07-19 21:38:07
【问题描述】:
我正在尝试使用函数更新表,但我的更新语法遇到了一些问题,想知道是否有人可以帮助指出我哪里出错了。
我的航班表:
SQL> describe flights
Name Null? Type
----------------------------------------- -------- ------------
AIRLINE VARCHAR2(3)
AIRLINE_ID VARCHAR2(5)
SRC_AIRPORT VARCHAR2(4)
SRC_AIRPORT_ID VARCHAR2(5)
DEST_AIRPORT VARCHAR2(4)
DEST_AIRPORT_ID VARCHAR2(5)
CODESHARE CHAR(1)
STOPS NUMBER(38)
EQUIPMENT VARCHAR2(50)
DISTANCE NUMBER
我的带有函数的select语句没有问题:
SELECT SRC,DEST,calc_distance(lat1,lon1,lat2,lon2)as dist
FROM (Select flights.src_airport as SRC, airports1.Latitude as lat1,
airports1.longitude as lon1,flights.dest_airport as DEST, airports2.Latitude as lat2,
airports2.longitude as lon2 FROM airports airports1 JOIN
flights
ON airports1.iata_faa = flights.src_airport
JOIN
airports airports2
ON airports2.iata_faa = flights.dest_airport);
我遇到问题的地方是更新航班表,以将此选择的距离计算包含到航班中的适当元组中。我想要做的是检查 select 语句中的源机场和目的地机场是否等于航班表中的 src 和目的地机场并相应地插入,但是在编写此语句时我一直遇到问题。
到目前为止,我有:
UPDATE flights f1
SET distance =
(
SELECT DISTINCT calc_distance(lat1,lon1,lat2,lon2)
FROM
(Select f2.src_airport as SRC, airports1.Latitude as lat1,
airports1.longitude as lon1,f2.dest_airport as DEST, airports2.Latitude as lat2,
airports2.longitude as lon2 FROM airports airports1
JOIN
flights f2
ON airports1.iata_faa = f2.src_airport
JOIN
airports airports2
ON airports2.iata_faa = f2.dest_airport
)
)
WHERE
f1.src_airport = f2.src_airport
AND
f1.dest_airport = f2.dest_airport;
但不断收到错误:
ERROR at line 20:
ORA-00904: "F2"."DEST_AIRPORT": invalid identifier
任何人都知道如何解决这个问题,我认为问题在于在连接之外使用 where 语句。
【问题讨论】:
-
您似乎在
SELECT之外使用WHERE,这不起作用。也许只是删除WHERE之前的第一个开放括号和关闭括号。
标签: sql oracle join where-clause correlated-subquery