Обновить строки в одной таблице MySQL, где строки с совпадающим столбцом существуют в другой таблице? - PullRequest
1 голос
/ 13 сентября 2011

У меня есть две таблицы ("z" и "z_ao"). «z» содержит все почтовые индексы в США вместе с другой необходимой информацией. «z_ao» содержит только определенные почтовые индексы. Я хочу установить для столбца «ls» значение «1» в каждой строке в «z», где «zip» в «z» соответствует «zip» в «z_ao».

Я читал весь день, чтобы определить «правильный» способ сделать это, который, я думаю, использовал бы JOIN, но был удручающе запутан, и в этом случае это была одноразовая операция, поэтому я наконец-то сделал следующее неуклюжий, интенсивный запрос:

$z = mysql_query("SELECT zip_code FROM z");
while($z_row = mysql_fetch_row($z)) {
  $zao = mysql_query("SELECT zip FROM z_ao WHERE zip='$z_row[0]'");
  $zao_num=mysql_numrows($zao);
  if (mysql_numrows($zao) == 1) {
    mysql_query("UPDATE z SET ls = '1' WHERE zip_code='$z_row[0]'");
  }
}

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

Спасибо.

Ответы [ 2 ]

5 голосов
/ 13 сентября 2011

Попробуйте несколько таблиц ОБНОВЛЕНИЕ:

UPDATE z INNER JOIN z_ao ON z.zip_code = z_ao.zip SET z.ls='1' 

Вам не нужно делать подсчеты, тесты или циклы.JOIN сопоставляет строки для вас и автоматически исключает почтовые индексы, которые не совпадают в вашей таблице z_ao.

2 голосов
/ 13 сентября 2011

как насчет IN ...

update z set ls = 1 where zip_code IN ( select zip_code from z_ao );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...