我正在试图弄清楚什么是非常简单的SQL结构。我的任务看起来很简单 - 在同一个表中我需要用一个主记录中的数据更新3个相关记录。主坐标在记录中有一个'T'类,我想将该记录的坐标插入到相关记录的rx_latitude / longitude列中,类代码为'R'
表结构是:callign,class,tx_latitude,tx_longitude,rx_latitude,rx_longitude。示例数据如下所示:
J877, T, 40.01, -75.01, 0, 0
J877, R, 39.51, -75.21, 0, 0
J877, R, 40.25, -75.41, 0, 0
J877, R, 39.77, -75.61, 0, 0
在同一个表中,我想填充所有rx_latitude和rx_longitude字段,其中类为'R',其中tx_latitude和tx_longitude坐标为类,其中类为'T'且呼号匹配。
我已经尝试了几个插入和更新语句,但我似乎只能操作主记录,而不是相关记录。我很感激您提供的任何指导。
答案 0 :(得分:2)
您可以使用UPDATE ... FROM语句:
UPDATE theTable
SET
tx_latitude = masterRecord.tx_latitude,
tx_longitude = masterRecord.tx_longitude
FROM
(SELECT tx_latitude,tx_longitude,callsign FROM theTable WHERE class='T') masterRecord
WHERE
class='R' AND callsign = masterRecord.callsign
答案 1 :(得分:0)
尝试:
update yourTable t1, yourTable t2 set
t1.tx_latitude = t2.tx_latitude,
t1.tx_longitude = t2.tx_longitude
where t1.class = 'R' and t2.class = 'T' and t1.callsign = t2.callsign
答案 2 :(得分:0)
您可以使用MySQL的update ... join
语法。
它会是这样的:
update yourtable toUpdate
left join yourtable masterRecordTable
on toUpdate.callsign = masterRecordTable.callsign and masterRecordTable.class = 'T'
set toUpdate.rx_latitude = masterRecordTable.tx_latitude,
toUpdate.rx_longitude = masterRecordTable.tx_longitude
where toUpdate.callsign = 'J877' and toUpdate.class = 'R'
有关工作示例,请参阅此fiddle