我正在尝试在表之间传输一些数据。 “NEW”表可以包含多个数据条目,这些条目最初并不意味着“OLD”表中有多个条目。我想从'OLD'表中获取数据并将其复制到新表中,其中NEW.ID是最低的,其中new.OtherID = old.OtherID,基本上是每组NextID的MIN(ID)等于彼此。
'新'表格
ID | OtherID | Data
1 1 NULL
2 1 NULL
3 2 NULL
4 3 NULL
5 3 NULL
'旧'
OtherID | Data <br>
1 data1
2 data2
3 data3
4 data4
5 data5
更新后的“新”表中的所需结果:
ID | OtherID | Data <br>
1 1 data1
2 1 NULL
3 2 data2
4 3 data3
5 3 NULL
等
谢谢!
答案 0 :(得分:5)
这就是你如何在MySQL中使用INNER JOIN和UPDATE:
UPDATE NEW n
INNER JOIN (
SELECT
OtherID,
MIN(ID) AS ID
FROM NEW
GROUP BY OtherID
) m ON n.ID = m.ID
INNER JOIN OLD o ON n.OtherID = o.OtherID
SET n.Data = o.Data
答案 1 :(得分:0)
您可以尝试:
UPDATE new
SET Data = ( SELECT DATA FROM old WHERE otherID = new.otherID )
WHERE NOT EXIST
( SELECT NULL FROM new AS new2
WHERE new2.id < new.id
AND new2.otherID = new.otherID )
请注意,这是标准的SQL92,可以与任何RDBMS一起使用。
答案 2 :(得分:0)
这在PostgreSQL中对我有用,虽然我可能在MySQL上引用错误。
UPDATE newtable SET
`Data` = oldtable.`Data`
FROM
oldtable
WHERE
newtable.`ID` IN (
SELECT MIN(sub_newtable.`ID`)
FROM newtable sub_newtable
GROUP BY
sub_newtable.`OtherID`
)
AND newtable.`OtherID` = oldtable.`OtherID`
答案 3 :(得分:-1)
您可以使用:
UPDATE `NEW`
LEFT JOIN `OLD`
ON `NEW`.`OtherID` = `OLD`.`ID`
SET `NEW`.`Data` = `OLD`.`Data`
编辑:很抱歉,这将更新与OLD中的列对应的所有记录。