Здравствуйте! Я целый день ломаю голову над такой задачей: есть 2 таблицы t1 и t2. Столбцы в t1: id_t1, number1_t1, number1_max_t1, а в t2: id_t2, id_t1_t2, number2_t2. Мне нужно обновить number1_t1, при условии, что number1_t1 больше number1_max_t1+(сумма number2_t2 одного пользователя - через id_t1_t2). Я пробовал по-разному - вот один из неудачных примеров: UPDATE `t1` SET `number1_t1`=`number1_max_t1` WHERE `number1_t1`>`number1_max_t1` + (SELECT SUM(`number2_t2`) FROM `t2` WHERE `id_t1`= `id_t1_t2` GROUP BY `id_t1_t2`) Подскажите, пожалуйста, как решить данную задачу?
Re: Как сложить значения нескольких столбцов из разных табли Изучайте JOIN SQL http://www.site-do.ru/db/sql6.php
Re: Как сложить значения нескольких столбцов из разных табли За наводку спс. С JOIN немного разобрался. Возникла другая проблема вот в этом месте: SELECT (`t1.a1`) + SUM(`t2.b1`) FROM... Когда `t2.b1` пустая, то и результат весь (имеется ввиду при выводе (`t1.a1`) + SUM(`t2.b1`)) пустой получается... Я думал будет выходить при таком условии только значение `t1.a1`. К примеру `t1.a1` = 100, а `t2.b1`- пустое, то и итог = 100, а на самом деле итог так же пустой выходит. Как можно решить данную задачу?
Re: Как сложить значения нескольких столбцов из разных табли Создай свою базу данных/с данными тут http://sqlfiddle.com/ и покажи какой результат хочешь получить.
Re: Как сложить значения нескольких столбцов из разных табли К сожалению только сегодня смог нормально сесть и попробовать разобраться... Я не совсем понял как там создать свою базу... Я сделал нужный мне запрос только на выборку. SELECT IF (SUM(`max_t3`) > 0, `a_max_t1` + SUM(`max_t3`), `a_max_t1`) AS `a1` FROM `t1` AS `a2` LEFT OUTER JOIN `t2` AS `a3` ON (`id_t1` = `id_t1_t2`) LEFT OUTER JOIN `t3` AS `a4` ON (`id_t1` = `id_t1_t3`) WHERE `id_t1` > 0 AND `x_t2`=10 AND `y_t2`=12 GROUP BY `id_t1` И теперь ломаю голову как вместо выборки сделать обновление... Что можете посоветовать?
Re: Как сложить значения нескольких столбцов из разных табли Для наглядности сделал пример таблиц. Код (Text): t1 t2 t3 --------------------- -------------------------- ----------------------- |id_t1|a_t1|a_max_t1| |id_t2|id_t1_t2|x_t2|y_t2| |id_t3|id_t1_t3|max_t3| | 1 |3000| 2000 | | 1 | 1 | 10 | 12 | | 1 | 1 | 100 | | 2 |1200| 2100 | | 2 | 2 | 10 | 12 | | 2 | 1 | 300 | | 3 |2000| 2200 | | 3 | 3 | 10 | 12 | | 3 | 2 | 200 | | 4 |1550| 2050 | | 4 | 4 | 50 | 20 | | 4 | 1 | 400 | | 5 |3200| 2800 | | 5 | 5 | 10 | 12 | | 5 | 3 | 600 | | 6 |1800| 2000 | | 6 | 6 | 10 | 12 | | 6 | 3 | 100 | | 7 |3000| 2000 | | 7 | 7 | 25 | 80 | | 7 | 2 | 800 | | 8 |1000| 5500 | | 8 | 8 | 10 | 12 | | 8 | 7 | 100 | | 9 |3600| 4000 | | 9 | 9 | 10 | 12 | | 9 | 7 | 400 | | 10 |1000| 2000 | | 10 | 10 | 10 | 12 | | 10 | 10 | 500 | | 11 |4400| 8200 | | 11 | 11 | 10 | 12 | | 11 | 10 | 900 | | 12 |3000| 5300 | | 12 | 12 | 10 | 12 | | 12 | 10 | 800 | | 13 |6000| 7200 | | 13 | 13 | 10 | 12 | | 13 | 2 | 200 | | 14 | 2 | 100 | | 15 | 6 | 300 | | 16 | 13 | 700 | Мне нужно обновить столбец `a_t1`=`a_max_t1`+SUM(`max_t3`), если есть SUM(`max_t3`), а если нет, то `a_t1`=`a_max_t1` при условии, что `a_t1` > `a_max_t1`+SUM(`max_t3`), если есть SUM(`max_t3`), а если нет, то `a_t1`>`a_max_t1` если к примеру `x_t2`=10, `y_t2`=12. Как правильно составить такой запрос? Вот только смог пока сделать выборку для всех `id_t1`. SELECT IF (SUM(`max_t3`) > 0, `a_max_t1` + SUM(`max_t3`), `a_max_t1`) AS `a1` FROM `t1` AS `a2` LEFT OUTER JOIN `t2` AS `a3` ON (`id_t1` = `id_t1_t2`) LEFT OUTER JOIN `t3` AS `a4` ON (`id_t1` = `id_t1_t3`) WHERE `id_t1` > 0 AND `x_t2`=10 AND `y_t2`=12 GROUP BY `id_t1`