вычитание если нет соответствующего поля

slip

Guest
вычитание если нет соответствующего поля

Люди такой вопрос, есть

SUM(таблица1.поле1-таблица2.поле1)

мне нужно их отнять друг от друга, это понятно, но если таблицы2.поле1 нету а таблицу1.поле1 по прежднему нужно вывести что делать? Просто я смотрел через explain и получается что mysql не присваевает не найденой таблице NULL, а пишет что таблица не найдена...что в принципе верно.. как то через IF?

SUM(IF(ISNULL(таблица2.поле1) таблица1.поле1-таблица2.поле1))

Эта структура не работает...
Спасибо!
 

.des.

Поставил пиво кому надо ;-)
Мыслите в правильном направлении -> если поле ISNULL то вместо него надо вычесть 0 поэтому два конструкции IF и ISNULL то что Вам нужно, только правильно сложите %)
 

alexhemp

Новичок
slip

Что значит "поля нет"?

MySQL обрабатывает поля в таблицах. Если поля в таблице нет, то значит - будет синтаксическая ошибка.
Пиши синтаксически верные запросы.
 

.des.

Поставил пиво кому надо ;-)
alexhemp, по моему, если включить telepat mode, то можно догадаться, что поля у него нет при LEFT JOIN :D раз null значит нет.
 

slip

Guest
А да....Хорошая штука telepat mode...=)))) По русский это звучало бы "нет соответствующей записи таблици Н в таблице Е"...

следовательно нам нужно присвоить 0 той записи которая не найдена?

SUM(IF(ISNULL(table1.pole1) ...

ой...чего то я дальше начинаю мыслить как в PHP, мы же ничего не может присвоить таблице...или можем? или я не туда думаю? :)

а вообще не понимаю почему не работает...ведь ЕСЛИ условие НЕ верно то он просто не должен делать этот запрос и идти дальше так ведь? почему он его тогда делает?
 

.des.

Поставил пиво кому надо ;-)
Вообщем так.
Код:
SELECT SUM(t1.pole1-IF(ISNULL(t2.pole1),0,t2.pole1)) FROM ...
Или еще проще.
Код:
SELECT SUM(t1.pole1-IFNULL(t2.pole1,0)) FROM ...;
 

slip

Guest
Ух ты...первый раз вижу такую структуру, в жизни бы не догадался, а где можно про IF почитать? в мануале ничтожно мало....

.des. спасибо щас будем пробовать...

А еще вопрос, дальше я использовал HAVING result > 0, то есть везультат всех этих вычеслений должен быть больше ноля....это верно?
 
Сверху