SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 11.09.2011 20:36:50

stive
Участник
Зарегистрирован: 11.09.2011
Сообщений: 11

Сравнение двух таблиц и обновление поля

Здравствуйте, помогите решить задачу
Нужно сравнить 2 таблицы и обновить поле в одной из них
Первая таблица
Table1
lok | mot

Вторая таблица
Table2
on | key | key2

Где Table2.key и Table2.key2 равны Table1.lok

И если Table1.mot больше 100, то Table2.on перезаписать на 0

Как можно это сделать?

Неактивен

 

#2 11.09.2011 22:08:30

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Сравнение двух таблиц и обновление поля

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

Неактивен

 

#3 12.09.2011 08:33:50

stive
Участник
Зарегистрирован: 11.09.2011
Сообщений: 11

Re: Сравнение двух таблиц и обновление поля

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

Великолепно smile Спасибо большое, очень выручили меня.

Неактивен

 

#4 12.09.2011 10:26:29

stive
Участник
Зарегистрирован: 11.09.2011
Сообщений: 11

Re: Сравнение двух таблиц и обновление поля

Столкнулся с еще одной проблемой sad
При обновлении поля в таблице, перезаписывает у все 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

Неактивен

 

#5 12.09.2011 10:32:11

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Сравнение двух таблиц и обновление поля

А зачем вы поставили or вместо and?

Неактивен

 

#6 12.09.2011 10:41:42

stive
Участник
Зарегистрирован: 11.09.2011
Сообщений: 11

Re: Сравнение двух таблиц и обновление поля

а с 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)

Неактивен

 

#7 11.06.2012 21:00:58

freeetu
Участник
Зарегистрирован: 11.06.2012
Сообщений: 11

Re: Сравнение двух таблиц и обновление поля

А в подобном запросе можно сделать 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)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson