Помогите разобраться в запросе. Обновление данных.

push

Новичок
Помогите разобраться в запросе. Обновление данных.

есть 2 таблицы:
PHP:
mysql> desc PartNumberDebt;
+------------+-------------+------+-----+---------+----------------+
| Field      | Type        | Null | Key | Default | Extra          |
+------------+-------------+------+-----+---------+----------------+
| id         | int(10)     | NO   | PRI | NULL    | auto_increment |
| numberwo   | varchar(50) | YES  |     | NULL    |                |
| partnumber | varchar(50) | YES  |     | NULL    |                |
| count      | tinyint(4)  | YES  |     | NULL    |                |
+------------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

mysql> desc workorders;
+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| id       | int(10)     | NO   | PRI | NULL    | auto_increment |
| numberce | varchar(50) | YES  |     | NULL    |                |
| numberwo | varchar(50) | YES  |     | NULL    |                |
| datewo   | date        | YES  |     | NULL    |                |
| statuswo | varchar(50) | YES  |     | NULL    |                |
+----------+-------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)
в них хранятся схожие данные, допустим в одной 500 записей а в другой 1000.
нужно сравнить таблицы и где равно обновить statuswo поле.

начал было делать так:
PHP:
update workorders set statuswo='Parts return failure'
where (select PartNumberDebt.numberwo from PartNumberDebt)=workorders.numberwo
 and date_add(datewo,INTERVAL 2 DAY)<CURDATE() and statuswo!='Completed' and statuswo!='Completed with fouls';
но так как (select PartNumberDebt.numberwo from PartNumberDebt) множество значений, такое сравнение не пройдет, я подумал в сторону цикла, но раньше не использовал его никогда, верно ли мои направления? если нет то как логичнее было бы сделать?
 

alpine

Новичок
но так как (select PartNumberDebt.numberwo from PartNumberDebt) множество значений, такое сравнение не пройдет, я подумал в сторону цикла, но раньше не использовал его никогда, верно ли мои направления? если нет то как логичнее было бы сделать?
Подумай в сторону двух запросов. В первом ты находишь записи которые надо обновить, а во втором ты их обновляешь.

-~{}~ 04.09.07 17:44:

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

push

Новичок
Реализовал немного по другому, главное работает, потом можно и переделать когда времени побольше будет.
PHP:
CREATE TEMPORARY TABLE temp as select PartNumberDebt.numberwo from PartNumberDebt,workorders
 where PartNumberDebt.numberwo=workorders.numberwo;
update workorders set statuswo='Closed' 
where workorders.numberwo=ANY(select numberwo from temp) and date_add(datewo,INTERVAL 2 DAY)>=CURDATE()
 and statuswo!='Completed' and statuswo!='Completed with fouls';
DROP TABLE temp;
 
Сверху