UPDATE при условии связи со второй таблицей

alpes

Весь мир на ладони
UPDATE при условии связи со второй таблицей

Мне нужно обновить поле одной таблицы при условии, что ее ключ встретится во второй таблице. Это я хочу сделать при помощи такого алгоритма:
PHP:
SELECT Key FROM table2 ...
while(list($Key2)=mysql_fetch_row($sql_res))
 $sql_query="UPDATE Table1 SET state='Y' WHERE Key='$Key2'";
...
Или одним запросом на обновление:
PHP:
SELECT Key FROM table2 ...
if(mysql_num_rows($sql_res))
{
 while(list($Key2)=mysql_fetch_row($sql_res))
  if(isset($w)) $w.=" OR Key='$Key2'";
  else $w="Key='$Key2'";
 $sql_query="UPDATE Table1 SET state='Y' WHERE $w";
...
}
Собственно у меня полтора вопроса:
Можно ли как-то все обновление сделать одним запросом, типа:
PHP:
UPDATE Table1, table2 SET Table1.state='Y' WHERE Table1.Key=table2.Key
и если нельзя, то какой вариан правильнее (при условии что прийдется обновлять пару тысяч записей)?
 

alpes

Весь мир на ладони
А если мускул 3.23.49, то выходит и неможем?!
 

Апельсин

Оранжевое создание
> А если мускул 3.23.49, то выходит и неможем?!
одним запросом - нет.
 

alpes

Весь мир на ладони
А как правильнее поступить, или какой вариан предпочтительней, см. выше, с большим количеством одинарных апдейтов или с одни апдейтом но афигенным условием?
 

ForJest

- свежая кровь
Правильный вариант
PHP:
SELECT Key FROM table2 ... 
$keys = array(-1);
while(list($Key2)=mysql_fetch_row($sql_res)) 
{
     $keys[] = $Key2;
}
$sql_query="UPDATE Table1 SET state='Y' WHERE key IN(".implode(",", $keys).")";
 

Benvolio

Guest
ага.. ты еще LOCK Table 1 WRITE поставь, чтобы апдейты сразу всем скопом влились..
 
Сверху