2013-10-10 2 views
0

Когда я добавляю последнюю строку «и @summ> 0 (любое условие)» Он возвращает пустой результат. Что я делаю неправильно? Как право проходить @summ в where clause?Переменная Mysql, где пункт

select 
     nore.nis as nore_curent, 
     field_funds.value, 
    (select @summ := 
     sum(field_amount.value - field_amount_tip.value) 
      from 
     nore 
     inner join field_project on nore.nis = field_project.id 
     inner join field_funds on field_funds.id = field_project.target_id 
     inner join field_amount on nore.nid = field_data_field_amount.id 
     inner join field_amount_tip on nore.nis = field_amount_tip.id 
      where 
     nore.`s` = 1 
      and 
     nore.`t` = 'p' 
      and 
     field_project.target_id = nore_curent) as amount 
     from 
     nore 
     inner join field_funds on nore.nis = field_funds.id 
     where 
     nore.`s` = 1 
     and 
     nore.`t` = 'pp' 
     and @summ > 0 
+1

вы не можете использовать "и количество> 0"? – user1455836

+0

Попробуйте использовать HAVING, как это: где это nore.'s' = 1 и nore.'t' = 'рр' HAVING сумма> 0 – Silvanu

+0

спасибо :))) !!! за работой – user2867429

ответ

0

Это стоит remaind некоторых основ, связанных с концептуальным (или логическим) порядком оценки в Select Оператор- здесь: http://tinman.cs.gsu.edu/~raj/sql/node22.html

Ордер:

  1. ОТ
  2. ГДЕ
  3. ГРУППА ПО
  4. ИМЕТЬ
  5. ORDER BY
  6. ВЫБОР


ИНЕКЕ вычисляется (выполняется) перед тем ВЫБОР положение.
Значение @summ рассчитывается в предложении SELECT (основного запроса), поэтому его значение неизвестно, когда DMBS оценивает предложение WHERE.

Unknown = NULL

Поэтому этот запрос не будет работать должным образом.

Перепишите запрос в:

select 
     nore.nis as nore_curent, 
     field_funds.value, 
    (select sum(field_amount.value - field_amount_tip.value) 
      from 
     nore 
     inner join field_project on nore.nis = field_project.id 
     inner join field_funds on field_funds.id = field_project.target_id 
     inner join field_amount on nore.nid = field_data_field_amount.id 
     inner join field_amount_tip on nore.nis = field_amount_tip.id 
      where 
     nore.`s` = 1 
      and 
     nore.`t` = 'p' 
      and 
     field_project.target_id = nore_curent) as amount 
     from 
     nore 
     inner join field_funds on nore.nis = field_funds.id 
     where 
     nore.`s` = 1 
     and 
     nore.`t` = 'pp' 
     and 0 < (select sum(field_amount.value - field_amount_tip.value) 
        from nore 
        inner join field_project on nore.nis = field_project.id 
        inner join field_funds on field_funds.id = field_project.target_id 
        inner join field_amount on nore.nid = field_data_field_amount.id 
        inner join field_amount_tip on nore.nis = field_amount_tip.id 
        where 
        nore.`s` = 1 
        and 
        nore.`t` = 'p' 
        and 
        field_project.target_id = nore_curent 
) 
Смежные вопросы