更新一个MySQL表上的行,其中具有匹配列的行存在于另一个表上?

时间:2011-09-12 21:53:31

标签: php mysql join compare

我有两张桌子(“z”和“z_ao”)。 “z”包含美国的所有邮政编码以及其他所需信息。 “z_ao”仅包含某些邮政编码。我想在“z”的每一行中将“ls”列设置为“1”,其中“z”中的“zip”与“z_ao”中的“zip”匹配。

我一整天都在阅读以确定“正确”这样做的方式,我认为这会使用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 个答案:

答案 0 :(得分:5)

尝试多表更新:

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

您无需进行任何计数或测试或循环。 JOIN会为您匹配行,并自动排除z_ao表中不匹配的邮政编码。

答案 1 :(得分:2)

IN ...怎么样?

update z set ls = 1 where zip_code IN ( select zip_code from z_ao );