1

我有选择语句,它将数据作为一个名为 new_iata_code 的新虚拟列返回

我想用这个数据把它变成真正的列,并用表格导出它。这个怎么做?

    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 回答