【问题标题】:Copy/ Update the primary keys value to another column of the same table复制/更新主键值到同一张表的另一列
【发布时间】:2014-10-10 07:21:45
【问题描述】:

我有一个MySQL数据库表subscribers如下图:

我只需要让subscriber_number 与subscriber_id 相同。

例如:如果subscriber_id 是261,subscriber_number 是262,那么我需要把subscriber_number 设为261,和subscriber id 一样。

你能帮我用 MySQL 查询来解决这个问题吗?

更新 1:

我希望从这里的专家那里获得 MySQL 查询。我尝试的是获取 id 和 number 都不同的行

SELECT subscriber_id,subscriber_number 
FROM subscribers 
WHERE subscriber_id <> subscriber_number

请运行下面的代码sn-p查看带有示例数据的表结构

<table>
  <thead>
    <tr>
      <td style="border-right:1px solid #000;border-bottom:1px solid #000;">subscriber_id</td>
      <td style="border-right:1px solid #000;border-bottom:1px solid #000;">subscriber_number</td>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="border-right:1px solid #000;border-bottom:1px solid #000;">260</td>
      <td style="border-right:1px solid #000;border-bottom:1px solid #000;">260</td>
    </tr>
    <tr>
      <td style="border-right:1px solid #000;border-bottom:1px solid #000;">261</td>
      <td style="border-right:1px solid #000;border-bottom:1px solid #000;">262</td>
    </tr>
    <tr>
      <td style="border-right:1px solid #000;border-bottom:1px solid #000;">262</td>
      <td style="border-right:1px solid #000;border-bottom:1px solid #000;">264</td>
    </tr>
    <tr>
      <td style="border-right:1px solid #000;border-bottom:1px solid #000;">263</td>
      <td style="border-right:1px solid #000;border-bottom:1px solid #000;">272</td>
    </tr>
    <tr>
      <td style="border-right:1px solid #000;border-bottom:1px solid #000;">264</td>
      <td style="border-right:1px solid #000;border-bottom:1px solid #000;">274</td>
    </tr>
    <tr>
      <td style="border-right:1px solid #000;border-bottom:1px solid #000;">266</td>
      <td style="border-right:1px solid #000;border-bottom:1px solid #000;">277</td>
    </tr>
    <tr>
      <td style="border-right:1px solid #000;border-bottom:1px solid #000;">268</td>
      <td style="border-right:1px solid #000;border-bottom:1px solid #000;">282</td>
    </tr>
    <tr>
      <td style="border-right:1px solid #000;border-bottom:1px solid #000;">269</td>
      <td style="border-right:1px solid #000;border-bottom:1px solid #000;">269</td>
    </tr>
  </tbody>
</table>

【问题讨论】:

  • 我不知道如何得到这个,我试图在更新之前获取subscriber_number 和subscriber_id 不同的行。从subscribers 中选择订阅者 ID、订阅者编号,其中订阅者 ID 订阅者编号
  • 我没有看到任何包含mysql的代码,只有一个表。
  • 那么你知道如何编写select语句并且你想学习如何编写关联的更新语句吗?这是您的要求吗?
  • @ThorstenKettner 是的,我只需要更新订户编号与订户 ID 不同的所有行。除了我还需要维护主键的顺序。例如,如果我的 scabscriber id 是 61,63,65,我也想将其设为 61,62,63 并使订阅者编号与订阅者 id 相同
  • 我想知道你为什么要这样做。如果您希望它们始终具有相同的值,为什么会有两个字段?另外:为什么数字必须是连续的? ID 通常就是这样,一些你不关心的数字,你只需要加入表。 (您甚至可以决定在没有技术 ID 的情况下构建数据库,而使用表的自然键。)另一方面,订户编号是唯一标识订户的编号(我猜)。你已经有了这个。你会从他们连续获得什么?

标签: mysql sql


【解决方案1】:

SQL 是

UPDATE subscribers SET subscriber_number = subscriber_id

这将为您的订阅者表中的每一行设置subscriber_number 为subscriber_id。

【讨论】:

  • +1 表示您的上述查询。顺便说一句,我还需要维护订阅者 ID 序列。例如,如果我的 scabscriber id 是 61,63,65,我也想将其设为 61,62,63,并使订阅者编号与订阅者 id 相同。
  • 通常您的 ID 列将是一个标识列,因此您无法更改它。我能想到的一种解决方案是让游标遍历每一行并更新subscriber_id ..但这看起来很丑陋,我看不出这有什么必要。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-08
  • 2018-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多