2012-06-24 148 views
1

我有两个表,表-A和表-B:MySQL的合并两个表

表-A:

city 
-------- 
tokoyo 
london 

表-B:

zipcode 
------- 
23675 
11290 

如何表-B结合表-A,像这样:

table_a:

city   zipcode 
--------  -------- 
tokoyo  23675 
london  11290 
+0

您的表不具有任何公共列加入吗? – Mat

+0

你能描述他们相关的方式吗?他们是否按照相同的顺序插入?有没有你没有描述的专栏? –

+0

@ctrahey与添加table_a相同,添加了一列名为zipcode的新列,并且从第1行插入data = array(23675,11290) – miket

回答

0

似乎你根本没有对你的问题做任何研究。有一些相关的问题提出了相同的问题。

Join two mysql tables

这等多个环节讨论你的问题。

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

+1

您应该对此进行了评论 – codingbiz

+0

在问完我已经完全搜索的问题之前,我找到了同样的问题,但没有解决方案http://www.justskins.com/forums/adding-a-column-with-140563.html – miket

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列,并保证所有邮编和城市在交易中以适当的方式输入。

+0

我刚刚测试你的代码,它从第1行更新,这太棒了!但第1行vlaue ==第2行vlaue – miket

+0

啊,是的,因为table_b中的所有行都会匹配table_a中的每一行...嗯...我有另一个想法,我将编辑我的帖子。但是,请反思我们有些人试图告诉你...你不能依赖与城市匹配的邮政编码, –

+0

PRIMARY KEY AUTO_INCREMENT这不是我之前有PRIMARY KEY的解决方案,但是我已经删除了PRIMARY KEY – miket

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);               
>                 
> }                   

卢卡斯·拉林斯基的回答是奇妙:

update multiple rows using limit in mysql?