2013-08-21 59 views
0

我有以下兩個表...拷貝到另一個具有相同的列數和名稱

Table1 
colA colB colC  
1  a  w  
2  b  w  
3  c  s   
4  b  g  
5  n   


Table2 
colA colB colC  
1  w  f  
2  w  r  
3  s  g  

我想從表1複製使用UPDATE查詢表2,這個問題我已經是我必須設置所有列名稱,其中每個表有100列,但是我也有相同的列數和名稱。

什麼是簡單的方法來運行查詢UPDATE在PHP?

是有一些的foreach事出有可能是......

這是我現在有...

public function update($id){ 
      try { 
       UPDATE table1 b 
       INNER JOIN connect c 
       ON c.ID = b.ID 
       INNER JOIN table2 a 
       ON a.ID_a = c.ID_a 
       SET b.colA = a.colA, 
       b.colB = a.colB, 
       b.colC = a.colC 
       . 
       . 
       . 
       . 
       . coontinue here all column name.. 
       . 
       . 
       WHERE a.ID_a = '".$id."' "; 
      } catch(PDOException $e) { 
       $e->getMessage(); 
      } 
      return false; 
     } 

一些想法嗎?

+0

我很確定一個有100列的表沒有被標準化。 –

+0

真的,這個結構如何... –

+0

這可能是'它是怎麼回事',但這並不一定意味着它是正常化的!你有什麼樣的東西呢? – Strawberry

回答

4

您不需要通過UPDATE語法來完成。您可以使用INSERT..SELECT

INSERT INTO `table2` SELECT * FROM `table1` 

這會工作,如果你有兩個表中完全相同的結構。如果不是,則必須編寫列名稱(以及從第一個表格到第二個表格的地圖列)。

如果你的魔杖取代相應的值,那麼你應該先刪除當前值:如果要更新其他表第一臺使用值數據,可以使用下面的語句

DELETE FROM `table2` WHERE `colA` IN (SELECT `colA` FROM `table1`) 
+0

這將創建新行,而不是從另一個表中更新數據。 –

+0

是的,但這不是OP想要的嗎? (更新編輯的帖子來實現替換問題) –

+0

是的。只要你先刪除。 –

1

UPDATE table_name AS t1 
SET t1.field_name = (SELECT field_name FROM other_table AS t2 WHERE t1.field=t2.field) 
+0

這就是我想要的,thx爲了節省我的時間:) – Judking

相關問題