[英]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列,並且所有郵編和城市事務在適當的對,其中輸入了保證。
最后我找到了解決方案:
> $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ý的回答非常棒:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.