【问题标题】:PHP - Replacing column's value from one table to anotherPHP - 将列值从一个表替换到另一个表
【发布时间】:2015-11-30 21:26:09
【问题描述】:

我必须要桌子。 (我正在使用MySQL)。它们具有相同的列数。让我通过展示其中的一些来向您展示:

表:payment

Id   TransactionCode   InvoiceNumber   
1     238694               322
2     518675               325
6     348611               401
13    750329               412

表:payment2

Id   TransactionCode   CustomerId
1     238694               32
2     NULL                 36
13    79                   48

所以,表payment 是保存正确值的表,如您所见,这两个表几乎相同,我只需将所有数据从payment.TransactionCode 移出并替换为payment2.TransactionCode

我想这样更新表 payment2:

    Id   TransactionCode   CustomerId
    1     238694               322
    2     518675               325
    6     348611               401
    13    750329               412

为了选择它,我使用了这个:

SELECT payment.Id AS id, 
       payment.TransactionCode AS TranC , 
       payment2.TransactionCode AS TranC2
        FROM payment
            LEFT JOIN payment2
                ON payment.Id = payment2.Id

它工作得很好。但是我怎么update/set的值呢?!我试过了,但没有用:

UPDATE payment 
        SET payment.TransactionCode = (SELECT payment2.TansactionCode 
            FROM payment2 
                WHERE payment.TransactionCode<>payment2.TransactionCode 
                    AND payment.Id=payment2.Id)

【问题讨论】:

  • 看起来不错,但是您发出了 SELECT 子句而不是 UPDATE 子句(确保备份!),而且您忘记在末尾关闭括号。
  • 感谢您的早日回复忘记括号是我的错,因为我在这里写的时候没有文本编辑器。我的实际代码中没有这样的缺陷。无论如何我都会为其他人编辑它。谢谢老哥
  • 嘿@Sean,对不起伙计.. 现在我在那里看到你的评论.. 让我试试这个..
  • 您希望 payment2 中的数据出现在支付表中吗?
  • No man,table: payment is complete one,这次我要payment的数据进来坐payment2。只有 TransactionColumn 不同,所以这足以改变。 ;)

标签: php mysql join left-join


【解决方案1】:

您可以像这样在UPDATE 子句中使用JOIN 表:

UPDATE payment
JOIN payment2 ON (payment.Id=payment2.Id) AND
             ((payment.TransactionCode<>payment2.TransactionCode) OR
              (payment.TransactionCode IS NULL) AND (payment2.TransactionCode IS NOT NULL) OR
              (payment.TransactionCode IS NOT NULL) AND (payment2.TransactionCode IS NULL))
SET payment.TransactionCode = payment2.TransactionCode

【讨论】:

  • 试过了,得到这个错误:“字段列表”中的未知列“payment2.TansactionCode”
  • 它没有产生任何错误,但也没有影响任何东西。这是我收到的:Statement 在 7.00 毫秒内影响了 0 行。
  • 请注意,我已经编辑了答案以反映 NULL 值的差异。
  • 我开始担心了,伙计!我再次收到此消息:Statement 在 68.00 毫秒内影响了 0 行。
  • 再次检查您的表格内容。我已经尝试了与您在上面写的相同的值,它似乎可以解决问题。
猜你喜欢
  • 2020-03-20
  • 2018-11-25
  • 1970-01-01
  • 2014-08-12
  • 2013-08-26
  • 2020-11-25
  • 2022-01-21
  • 1970-01-01
  • 2022-01-01
相关资源
最近更新 更多