1

table_a と table_b の 2 つのテーブルがあります。

テーブル 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;

構文が間違っていたらすみません。しばらく経ちました。

この手法は、null 以外の auto_increment 列を追加したときに MySQL が行うと私が考えるものを活用しています。行ごとに 1 つの一意の値が入力されます。これで結合列ができ、更新を実行できます。

ただし、明確にするためにもう一度述べます。テーブル間に追加の列がない場合、これら 2 つのテーブルを完全に正確に結合する方法はありません。共通の結合列が必要になる、少なくともそれぞれに auto_increment 列があり、すべての郵便番号と都市がトランザクションで適切なペアで入力されることを保証する必要があります。

于 2012-06-24T06:09:31.203 に答える
0

ご質問に関する調査をまったく行わなかったようです。同じことを尋ねる関連する質問がたくさんあります。

2 つの 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);                                                         
>                                                                   
>    }                                                                         

ルカーシュ・ラリンスキーの答えは素晴らしいです:

mysqlで制限を使用して複数の行を更新しますか?

于 2012-06-24T13:23:47.533 に答える