2015-09-04 77 views
2

我有表。 (我正在使用MySQL)。他們有相同的列數。讓我展示了一些它告訴你:PHP - 從一個表更換列的值到另一個

表: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) 
+0

似乎不錯,但你已經發出了'SELECT'條款,而不是一個'UPDATE'一個(確保備份!),再加上你忘了在最後關閉括號。 – uri2x

+1

感謝您的早日答覆 忘記括號是我的錯,當我沒有在這裏文本編輯寫的。它在我的實際代碼中沒有這些缺陷。無論如何,我爲其他人編輯它。 感謝隊友 – Sean

+0

嘿@Sean,對不起巴迪..現在我看到你的意見了..讓我試試這個.. –

回答

0

可以JOIN表上的UPDATE條款是這樣的:

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 
+0

試了一下,得到這個錯誤:在「字段列表」 – Sean

+0

它沒有取得任何錯誤 未知列「payment2.TansactionCode」,但它並沒有影響沒有什麼。這是我收到的: 聲明在7.00毫秒內影響了0行。 – Sean

+0

請注意,我編輯了答案以反映NULL值的差異。 – uri2x

相關問題