2012-06-24 3 views
1

У меня есть две таблицы, TABLE_A и TABLE_B:MySQL объединяющие две таблицы

TABLE_A:

city 
-------- 
tokoyo 
london 

TABLE_B:

zipcode 
------- 
23675 
11290 

Как совместить TABLE_B к TABLE_A, как это:

Таблица_a:

city   zipcode 
--------  -------- 
tokoyo  23675 
london  11290 
+0

Ваших таблицы не имеют какие-либо общие столбцов, чтобы присоединиться на? – Mat

+0

Не могли бы вы описать способы их родства? были ли они вставлены в том же порядке? Есть ли столбец, который вы не описали? –

+0

@ctrahey Так же, как добавить table_a в новый столбец под названием zipcode и вставить data = array (23675,11290) из строки 1 – miket

ответ

0

Казалось бы, вы не проводили никаких исследований, касающихся вашего вопроса. Существует множество связанных вопросов, которые задают одно и то же.

Join two mysql tables

Этот и многие другие ссылки обсудить свой вопрос.

(Этот ответ был бы комментарий, если я достаточно репутации. Я заранее извиняюсь.)

+1

, вы должны были сделать это comment – codingbiz

+0

Прежде чем задать вопрос, который у меня есть полный поиск, я нахожу тот же вопрос, но не имеют решения http://www.justskins.com/forums/adding-a-column-with-140563.html – miket

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 делает, когда вы добавляете столбец с ненулевым атрибутом auto_increment: он заполняет значения для вас, одно уникальное значение для каждой строки. Теперь у вас есть столбец соединения и можно выполнить обновление.

Однако я сформулирую это еще раз, чтобы быть очень ясным: если между таблицами нет дополнительных столбцов, у вас нет абсолютно точного способа объединения этих двух таблиц. Вам понадобится либо общий столбец объединения, либо, по крайней мере, каждый из них имеет столбец auto_increment и гарантию того, что все почтовые индексы и города, где они были введены в соответствующие пары транзакций.

+0

Я тестирую ваш код только сейчас, это обновление из строки 1, это здорово!но строка 1 vlaue == строка 2 vlaue – miket

+0

А, да, потому что все строки в таблице_b будут соответствовать каждой из строк в table_a ... hmmm ... У меня есть другая идея, я отредактирую свой пост с ней. однако, пожалуйста, подумайте о том, что некоторые из нас пытаются рассказать вам ... вы не можете полагаться на почтовый индекс, соответствующий городу, –

+0

PRIMARY KEY AUTO_INCREMENT это не решение, перед которым у меня есть ПЕРВЫЙ КЛЮЧ, но я удалил ПЕРВИЧНЫЙ КЛЮЧ – miket

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);               
>                 
> }                   

Лукаса Лалински является изумительным:

update multiple rows using limit in mysql?

Смежные вопросы