0

SQL スクリプトを使用して、すべての空港との間でスケジュールを自動的に追加しようとしています。これが私がこれまでに持っているコードです:

 INSERT INTO phpvms_schedules (depicao, arricao, distance)
 SELECT
        depart.icao,
        arrive.icao,
        ROUND(GreaterCircleNm(depart.lat,depart.lng,arrive.lat,arrive.lng),2) as Nm
 FROM phpvms_airports AS depart
 INNER JOIN phpvms_airports AS arrive ON depart.icao <> arrive.icao

GreaterCircleNm 関数:

DROP FUNCTION IF EXISTS GreaterCircleNm;
DELIMITER go
CREATE FUNCTION GreaterCircleNm( lat1 FLOAT, lon1 FLOAT, lat2 FLOAT, lon2 FLOAT ) RETURNS float
BEGIN
  DECLARE pi, q1, dist FLOAT;
  SET pi = PI();
  SET lat1 = lat1 * pi / 180;
  SET lon1 = lon1 * pi / 180;
  SET lat2 = lat2 * pi / 180;
  SET lon2 = lon2 * pi / 180;
SET q1 = ACOS(sin(lat1)*sin(lat2)+COS(lat1)*COS(lat2)*COS(lon1-lon2));
SET dist = q1*180*60/pi;
RETURN dist;
END;
go
DELIMITER ;

全体として、このエラーを修正するのに本当に助けが必要です:

1452 - 子行を追加または更新できません: 外部キー制約が失敗しました ( virtu259_phpvms. phpvms_schedules, CONSTRAINT phpvms_schedules_ibfk_1FOREIGN KEY ( code) REFERENCES phpvms_airlines( code) ON UPDATE CASCADE)

phpvms_airports:

ここに画像の説明を入力

phpvms_schedules:

ここに画像の説明を入力

4

1 に答える 1

0

icaoに値を挿入しようとしていphpvms_schedulesます。FK CONSTRAINT が、列ではなくテーブルの列をphpvms_schedules_ibfk_1指していることを確認する必要があります(現在指していると思われる場所です)。icaophpvms_airportsid

また

phpvms_airports.idに FK で戻るときに値を使用する必要がありますphpvms_airports

于 2013-08-08T16:40:34.460 に答える