【问题标题】:multiple column update with the value of other column [duplicate]使用其他列的值更新多列[重复]
【发布时间】:2013-11-28 11:42:40
【问题描述】:

我有两张桌子

fw_invitations

id    moduleid   qdetailid
1       1          10  
2       2          11
3       3          12
4       7          13
5       8          14

fw_ind_details

id    moduleid   officeid
 10       0         100 
 11       0         110
 12       0         120
 13       0         130
 14       0         104

qdetaild 列是fw_ind_details 中的主键。我想做的是从fw_invitations 表中获取moduleid 以获取特定的qdetailid 并希望更新fw_ind_details. 那应该用更新查询来完成。

期望的输出

fw_ind_details

   id    moduleid   officeid
   10       1         100 
   11       2         110
   12       3         120
   13       7         130
   14       8         104

这是我迄今为止尝试过的;

UPDATE `fw_ind_details` 
SET `moduleid`=(select moduleid 
               from fw_invitaions fo,fw_ind_details fi
               where f0.qdetailid=fi.id
                             )

我知道我的方法是错误的,任何建议将不胜感激。

我对 PHP 的使用持开放态度。

【问题讨论】:

  • @Barmar 感谢您的回复和回答。我有一个问题,有可能将一个 idetailid 分配给两个模块,即分配给两个不同的 moduleid,如何处理?提前谢谢

标签: php mysql sql


【解决方案1】:
UPDATE fw_ind_details d
JOIN fw_invitations i ON i.qdetailid = d.id
SET d.moduleid = i.moduleid

要在有多个匹配项时获取特定模块ID,可以使用子查询加入;此示例使用最高的模块 ID:

UPDATE fw_ind_details d
JOIN (SELECT qdetailid, MAX(moduleid) moduleid
      FROM fw_invitations
      GROUP BY qdetailid) i
ON i.qdetailid = d.id
SET d.moduleid = i.moduleid

【讨论】:

  • 你打败了我哈哈.. +1 得到同样的结果
  • @Barmer:非常感谢 :) 也会接受 +1。不能期待更好的答案。
  • @Barmer:我有一个问题,有可能将一个 idetailid 分配给两个模块,即分配给两个不同的 moduleid,如何处理?提前谢谢
  • 依次分配,最后分配的为最终结果。您或许可以使用ORDER BY 来控制它。
  • 但是,你可以加入一个子查询,我会更新答案来显示它。
【解决方案2】:

使用连接...

UPDATE `fw_ind_details` 
JOIN fw_invitations ON fw_ind_details.id = fw_invitations.qdetailid
SET fw_ind_details.moduleid = fw_invitations.moduleid

【讨论】:

  • 感谢您的回答:)
【解决方案3】:

要使用的 SQL 是:

UPDATE `fw_ind_details` fi
   SET `moduleid`=(SELECT moduleid 
                     FROM fw_invitaions fo
                    WHERE fo. qdetailid =fi.id
                         )

【讨论】:

  • 感谢您的回答:)
猜你喜欢
  • 1970-01-01
  • 2019-01-20
  • 2018-10-13
  • 2015-11-03
  • 1970-01-01
  • 2021-09-19
  • 1970-01-01
  • 2015-09-16
  • 1970-01-01
相关资源
最近更新 更多