table_a と table_b の 2 つのテーブルがあります。
テーブル a:
city
--------
tokoyo
london
テーブル_b:
zipcode
-------
23675
11290
次のように、table_b を table_a に結合する方法:
テーブル a:
city zipcode
-------- --------
tokoyo 23675
london 11290
table_a と table_b の 2 つのテーブルがあります。
テーブル a:
city
--------
tokoyo
london
テーブル_b:
zipcode
-------
23675
11290
次のように、table_b を table_a に結合する方法:
テーブル 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;
構文が間違っていたらすみません。しばらく経ちました。
この手法は、null 以外の auto_increment 列を追加したときに MySQL が行うと私が考えるものを活用しています。行ごとに 1 つの一意の値が入力されます。これで結合列ができ、更新を実行できます。
ただし、明確にするためにもう一度述べます。テーブル間に追加の列がない場合、これら 2 つのテーブルを完全に正確に結合する方法はありません。共通の結合列が必要になるか、少なくともそれぞれに 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);
>
> }
ルカーシュ・ラリンスキーの答えは素晴らしいです: