Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте, помогите решить задачу
Нужно сравнить 2 таблицы и обновить поле в одной из них
Первая таблица
Table1
lok | mot
Вторая таблица
Table2
on | key | key2
Где Table2.key и Table2.key2 равны Table1.lok
И если Table1.mot больше 100, то Table2.on перезаписать на 0
Как можно это сделать?
Неактивен
Неактивен
vasya написал:
update t1,t2 set t2.`on`=0 where t1.lok=t2.`key` and t1.lok=t2.key2 and t1.mot>100;
http://dev.mysql.com/doc/refman/5.5/en/update.html
Великолепно Спасибо большое, очень выручили меня.
Неактивен
Столкнулся с еще одной проблемой
При обновлении поля в таблице, перезаписывает у все id поля on, а нужно как то сделать что бы переписывал только у того у которого больше 100
Сейчас выглядит так
update t1,t2 set t2.`on`=0 where t1.lok=t2.`key` and t1.lok=t2.key2 or t1.mot>100;
Т.е. если скажем у меня записи идут так
T2
id_1 | key_1 | key2_1 | on=1
id_2 | key_2 | key2_2 | on=1
и если хоть один key или key2 равен больше 100 (T1.mot)
то все T2.on переписываются на 0, а нужно переписать только у которого T1.mot больше 100
Неактивен
А зачем вы поставили or вместо and?
Неактивен
а с and не работает почему то
Вобщем получается если делать так
update t1,t2 set t2.`on`=0 where t1.lok=t2.`key` and t1.lok=t2.key2 and t1.mot>100;
То не работает, если даже t1.mot=1000, поле t2.on=1 не перезаписывается на ноль, ничего не происходит
а если так
update t1,t2 set t2.`on`=0 where t1.lok=t2.`key` and t1.lok=t2.key2 or t1.mot>100;
по по достижению 101 голоса в t1.mot, все поля с t2.on=1, перезаписываются на 0
Как сделать так чтобы только нужное поле перезаписывалось
В t1 все поля key и key2 во всех id разные
Вот так вот получилось
UPDATE t2 INNER JOIN t1 ON t1.lok = t2.`key` or 1.lok = t2.`key2` set t2.on = 0 WHERE t1.mot > 100
Отредактированно stive (12.09.2011 12:47:17)
Неактивен
А в подобном запросе можно сделать LIMIT 1 к примеру, чтобы обновить только одну строку по условию.
Мне пишет "Incorrect usage of UPDATE and LIMIT".
"For the multiple-table syntax, UPDATE updates rows in each table named in table_references that satisfy the conditions. In this case, ORDER BY and LIMIT cannot be used." Уже понял ))
Отредактированно freeetu (11.06.2012 21:18:39)
Неактивен