1

我有两个表,table_a 和 table_b:

表_a:

city 
--------
tokoyo 
london 

表_b:

zipcode  
-------
23675
11290

如何将table_b与table_a结合起来,像这样:

表_a:

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

3 回答 3

1

如果没有要加入的公共列,我认为您将无法信任结果(据我所知,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 在您添加非空 auto_increment 列时所做的事情:它为您填充值,每行一个唯一值。现在您有一个连接列,并且可以执行更新。

但是,我将再次说明这一点非常清楚:如果表之间确实没有额外的列,那么您没有完全准确的方法来连接这两个表。您将需要一个公共连接列,或者至少每个都有一个 auto_increment 列,并保证所有邮政编码和城市在事务中以适当的对输入。

于 2012-06-24T06:09:31.203 回答
0

您似乎根本没有对您的问题进行任何研究。有许多相关的问题会问同样的问题。

加入两个mysql表

此链接和许多其他链接讨论您的问题。

(如果我有足够的声誉,这个答案将是一个评论。我提前道歉。)

于 2012-06-24T06:00:00.987 回答
0

最后我找到了解决方案:

>    $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中使用限制更新多行?

于 2012-06-24T13:23:47.533 回答