1

new_iata_code という新しい仮想列としてデータを返す select ステートメントがあります。

このデータで実際の列として作成し、テーブルでエクスポートしたいと考えています。これを行う方法?

    select cni.*,
// this statment return data as new column called  (new_iata_code )
           (select iata_code
            from cities_iata ci
            order by pow(cni.latitude - ci.latitude, 2) + pow(cni.longitude - ci.longitude, 2)
            limit 1
           ) as new_iata_code
// the table name is cities_no_iata cni
    from cities_no_iata cni;

// 更新コードは機能しません

update cities_no_iata join
       (select cni.*,
               (select iata_code
                from cities_iata ci
                order by pow(cia.latitude - ci.latitude, 2) + pow(cia.longitude - ci.longitude, 2)
                limit 1
               ) as new_iata_code
        from cities_no_iata cni
       ) upd
       on cities_no_iata.latitude = upd.latitude and
          cities_no_iata.longitude = upd.longitude
     set iata_code = upd.iata_code;
4

1 に答える 1

0

最初に TEMPORARY テーブルを作成します。

CREATE TEMPORARY TABLE tmp select cni.*,
           (select iata_code
            from cities_iata ci
            order by pow(cni.latitude - ci.latitude, 2) + pow(cni.longitude - ci.longitude, 2)
            limit 1
           ) as new_iata_code
    from cities_no_iata cni

そしてすぐに更新:

UPDATE cities_no_iata c
INNER JOIN tmp t on c.id = t.id //or what ever id column is named
SET c.new_iata_code = t.new_iata_code
于 2013-07-17T11:35:43.617 に答える