簡體   English   中英

mysql結合兩個表

[英]mysql combine two tables

我有兩個表,table_a和table_b:

table_a:

city 
--------
tokoyo 
london 

table_b:

zipcode  
-------
23675
11290

如何將table_b組合到table_a,如下所示:

table_a:

city          zipcode
--------      --------
tokoyo        23675
london        11290

如果沒有共同的列加入,我不認為你可以信任的結果(據我所知,MySQL 保證排在它們所插入的順序返回)。

但是從技術上來說,我認為您可以通過以下方式實現: 實際不執行此操作,請參見下文

ALTER TABLE table_a ADD COLUMN zipcode unsigned int;
ALTER TABLE table_a ADD COLUMN id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT NOT NULL;
ALTER TABLE table_b ADD COLUMN id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT NOT NULL;
UPDATE table_a JOIN table_b USING(id) SET table_a.zipcode = table_b.zipcode;

如果我的語法關閉,請原諒我,已經有一段時間了。

這種技術利用了我認為MySQL在添加非null auto_increment列時所做的事情:它為您填充值,每行一個唯一值。 現在您有了一個加入列,並且可以執行更新。

但是,我將再次說明這一點很清楚:如果表之間確實沒有其他列,則您將沒有完全准確的方法來連接這兩個表。 您將需要一個共用的連接列,或至少各有一個AUTO_INCREMENT列,並且所有郵編和城市事務在適當的對,其中輸入了保證。

看來您根本沒有對問題進行任何研究。 有很多相關問題問同樣的事情。

連接兩個mysql表

此鏈接和許多其他鏈接討論您的問題。

(如果我有足夠的聲譽,則此答案為評論。我事先表示歉意。)

最后我找到了解決方案:

>    $dbh->exec('ALTER TABLE `table_a` ADD COLUMN `zipcode` int(10) NOT NULL');
>                                                                   
>                                                                   
>    $i = 0;                                                                   
>    foreach ($dbh->query('SELECT zipcode FROM table_b') as $row) {            
>    $sql = 'UPDATE table_a SET zipcode='.$row["zipcode"].'                    
>     WHERE zipcode IN (                                                       
>         SELECT zipcode FROM (                                                
>             SELECT zipcode FROM table_a                                      
>             LIMIT '.$i.', 1                                                  
>         )  TMP                                                               
>     ) LIMIT 1;';                                                             
>    $dbh->exec($sql);                                                         
>    $i = $i +1;                                                               
>    }                                                                         
>                                                                   
>                                                                   
>                                                                   
>    $dbh->exec('ALTER TABLE `table_a` ADD COLUMN `zipcode` int(10) NOT NULL');
>                                                                   
>                                                                   
>    $zipcodes = array(23675,11290);                                           
>                                                                   
>    for ($i = 0;$i < 2;$i++){                                                 
>                                                                   
>    $sql = 'UPDATE table_a SET zipcode='.$zipcodes[$i].'                      
>     WHERE zipcode IN (                                                       
>         SELECT zipcode FROM (                                                
>             SELECT zipcode FROM table_a                                      
>             LIMIT '.$i.', 1                                                  
>         )  TMP                                                               
>     ) LIMIT 1;';                                                             
>    $dbh->exec($sql);                                                         
>                                                                   
>    }                                                                         

LukášLalinský的回答非常棒:

使用MySQL中的限制更新多行?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM