tôi phải lật số hiệu chuyến bay cho các chuyến bay của cặp đi tới đi lui từ một tập các thành phố, vì vậy ví dụ:Làm cách nào để trao đổi giá trị của bản ghi trong Oracle SQL?
1439 ATL SFO
1440 SFO ATL
sẽ kết thúc như:
1440 ATL SFO
1439 SFO ATL
tôi đã cố gắng truy vấn này (vì bạn không thể cập nhật .. JOIN trong Oracle):
UPDATE
(SELECT f.airline, f.flightno flightno_f, d.airline, d.flightno flightno_d
FROM flights f
INNER JOIN flights d ON f.airline = 9 AND
f.sourceairport = d.destairport AND
f.destairport = d.sourceairport AND d.airline = 9
WHERE d.flightno < f.flightno) g
SET g.flightno_f = g.flightno_d,
g.flightno_d = g.flightno_f;
nơi hãng hàng không, flightno là khóa chính cho các chuyến bay trên bàn. Lựa chọn này cung cấp cho tôi tập hợp các bản ghi chính xác mà tôi muốn hoán đổi, nhưng UPDATE ... SET cho tôi lỗi này:
SET g.flightno_f = g.flightno_d,
*
ERROR at line 7:
ORA-01779: cannot modify a column which maps to a non key-preserved table
Bất kỳ ý tưởng nào về việc tôi sẽ sai ở đâu?
@therin Hãy thử thêm ràng buộc các chuyến bay thay đổi bảng thêm ràng buộc flight_uk duy nhất (flightno); –
Thêm ràng buộc vào chế độ xem g mà tôi đã tạo? Tôi không chắc ý bạn là gì. Tôi đã thử thêm một ràng buộc khác vào bảng chuyến bay, nhưng một trong những vấn đề chính khác mà tôi đã giải quyết là tôi không thể thêm một ràng buộc duy nhất trên số hiệu chuyến bay, có thể có số chuyến bay giống hệt cho một hãng hàng không khác . – therin
@therin Đó là vấn đề bạn đang gặp phải vì bạn có số hiệu chuyến bay giống nhau, nó không thể cập nhật –