【问题标题】:MySQL Update a table from another tableMySQL 从另一个表更新一个表
【发布时间】:2015-06-09 19:13:36
【问题描述】:

我有两个名为 history 和 history detail 的表。历史表按月为我提供了健身房访问次数,因此存在重复用户。我想更新历史详细信息表以反映用户访问健身房的月份。我更新了历史详细信息表,使用户名唯一,因此没有重复。以下是我试图在历史详细信息表中实现的示例。

历史

|健身房使用 |月 |
|琼斯 |四月 |
|史密斯 |四月 |
|琼斯 |三月 |
|琼斯 |二月 |
|史密斯 |贾努阿 |

历史详情

|健身房使用 |一月 |二月 |三月 |四月 |
|琼斯_ | _ | X | X | X |
|史密斯_ | X | _ | _ | X |

【问题讨论】:

  • 那么问题出在哪里?
  • 我想把历史表中的月份复制到历史明细表中对应的月份。

标签: mysql


【解决方案1】:

只需做一个数据透视查询:

SELECT `Gym Use`,
       min(IF( `Month` = 'April', 'X', '_' )) As April,
       min(IF( `Month` = 'March', 'X', '_' )) As March,
       min(IF( `Month` = 'Febru', 'X', '_' )) As Febru,
       min(IF( `Month` = 'Janua', 'X', '_' )) As Janua
FROM history
GROUP BY `Gym Use`

演示:http://sqlfiddle.com/#!9/f71c5/1

并在多表更新中使用此查询的结果:

UPDATE `history detail` h, (
   SELECT `Gym Use`,
          min(IF( `Month` = 'April', 'X', '_' )) As April,
          min(IF( `Month` = 'March', 'X', '_' )) As March,
          min(IF( `Month` = 'Febru', 'X', '_' )) As Febru,
       min(IF( `Month` = 'Janua', 'X', '_' )) As Janua
   FROM history
   GROUP BY `Gym Use`
) x
SET h.April = x.April, h.March = x.March, h.Febru = x.Febru, h.Janua = x.Janua
WHERE h.`Gym Use` = x.`Gym Use`

演示:http://sqlfiddle.com/#!9/4c153/1

【讨论】:

  • 这个解决方案比我的漂亮很多。
【解决方案2】:
UPDATE history_detail SET Jan='X'
WHERE Gym_User IN (SELECT Gym_User FROM history WHERE Month='Janua');
UPDATE history_detail SET Feb='X'
WHERE Gym_User IN (SELECT Gym_User FROM history WHERE Month='Febru');

等等

【讨论】:

  • 谢谢!你让它看起来很容易。
猜你喜欢
  • 2011-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-18
  • 2013-02-15
  • 2018-06-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多