我有两个表,表-A和表-B:MySQL的合并两个表
表-A:
city
--------
tokoyo
london
表-B:
zipcode
-------
23675
11290
如何表-B结合表-A,像这样:
table_a:
city zipcode
-------- --------
tokoyo 23675
london 11290
我有两个表,表-A和表-B:MySQL的合并两个表
表-A:
city
--------
tokoyo
london
表-B:
zipcode
-------
23675
11290
如何表-B结合表-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在添加非空auto_increment列时所做的工作:它为您填充值,每行为一个唯一值。现在你有一个加入列,并且可以执行更新。
但是,我会再次声明这一点很清楚:如果表格之间确实没有附加列,那么您没有完全准确的方法来连接这两个表。您需要或共同连接列,或者至少每个连接列都有一个auto_increment列,并保证所有邮编和城市在交易中以适当的方式输入。
最后我找到了解决办法:
> $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);
>
> }
卢卡斯·拉林斯基的回答是奇妙:
您的表不具有任何公共列加入吗? – Mat
你能描述他们相关的方式吗?他们是否按照相同的顺序插入?有没有你没有描述的专栏? –
@ctrahey与添加table_a相同,添加了一列名为zipcode的新列,并且从第1行插入data = array(23675,11290) – miket