在MySQL中运行UPDATE查询(带有关系)

时间:2014-05-24 15:49:56

标签: mysql sql

有些人会看到我试图学习如何在MySQL上运行UPDATE查询(对于那些帮助过你的人 - 谢谢你)。然而,虽然肯定取得了进展,但我仍然在努力简单地用另一个专栏来更新一个专栏 - 而且无法让它发挥作用。

如果我运行以下SELECT查询,我会看到几千条与

匹配的记录
SELECT
`agr_addressbook`.`gtxr2_product_family` AS `gtxr2_product_family`,
`gtxuk_r2_machine`.`product_family` AS `product_family`
FROM (((`agr_addressbook`
JOIN `agr_addressbook_extra` ON ((`agr_addressbook`.`contact_id` = `agr_addressbook_extra`.`contact_id`)))
JOIN `gtxuk_machine` ON ((`agr_addressbook_extra`.`contact_value` = `gtxuk_machine`.`machine_id`)))
JOIN `gtxuk_r2_machine` ON ((CONVERT(`gtxuk_machine`.`machine_desc` USING utf8) = `gtxuk_r2_machine`.`machine_desc`)))
WHERE (`agr_addressbook_extra`.`contact_name` = 'mac_type')

但是,当我运行以下更新查询时 - 它不会更新单个值 - 这意味着我已经搞砸了某个地方:

UPDATE agr_addressbook ea 
JOIN agr_addressbook_extra eae ON eae.contact_id = ea.contact_id
JOIN gtxuk_machine hm ON hm.machine_id = eae.contact_value
JOIN gtxuk_r2_machine hrm ON hrm.machine_desc = CONVERT(hm.machine_desc USING utf8)
SET ea.gtxr2_product_family = hrm.product_family
WHERE eae.contact_name = 'mac_type'

谁能看到我出错的地方?

谢谢(再次)。

1 个答案:

答案 0 :(得分:0)

这(或类似的东西)可能有效:

UPDATE agr_addressbook ea 
SET ea.gtxr2_product_family = (
SELECT hrm.product_family FROM agr_addressbook_extra eae 
JOIN gtxuk_machine hm ON hm.machine_id = eae.contact_value
JOIN gtxuk_r2_machine hrm ON hrm.machine_desc = CONVERT(hm.machine_desc USING utf8) 
WHERE eae.contact_name = 'mac_type' AND eae.contact_id = ea.contact_id)

您的问题可能与UPDATE参数的工作方式有关。考虑如何将JOINed表作为表执行更改。