我有两个表table_a和table_b:
表-A:
city
--------
tokoyo
london
表-B:
zipcode
-------
23675
11290
如何将table_b与table_a组合,如下所示:
表-A:
city zipcode
-------- --------
tokoyo 23675
london 11290
答案 0 :(得分: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在添加非null auto_increment列时的作用:它为您填充值,每行一个唯一值。现在您有一个加入列,可以执行更新。
但是,我将再次说明这一点:如果表之间确实没有其他列,则没有完全准确的方法来连接这两个表。您需要 一个公共连接列,或者至少每个都有一个auto_increment列,并保证在事务中以适当的对形式输入所有zipcodes和city。
答案 1 :(得分:0)
看起来你根本没有对你的问题进行任何研究。有一系列相关的问题也提出同样的问题。
这个和许多其他链接讨论了你的问题。
(如果我有足够的声誉,这个答案就是评论。我提前道歉。)
答案 2 :(得分: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ý的回答非常棒: