2016-02-11 2 views
-1

У меня есть запрос, который идет как это:SQL выбрать строки, которые соответствуют условию оцененной

SELECT t1.customer_name, t1.total, t2.customer_name, t2.total, 
     (t1.total - t2.total) as var_1 
FROM topuserslcy t1, topuserslcy t2 
WHERE t1.report_date = '2015-12-22' AND 
     t2.report_date = '2015-12-23' AND var_1 > 0; 

Я хочу, чтобы выбрать только строки, где значение или var_1 положительно или больше нуля. Thnaks

+0

Либо (ANSI SQL-совместимый) сделать ваш выбор в производной таблице, или MySQL путь, используйте предложение HAVING. – jarlh

+0

или просто используйте 't1.total - t2.total' снова - но см. Комментарии Гордона ниже – Strawberry

ответ

0

Вы не можете использовать псевдонимы столбцов в предложении from. Я сильно подозреваю, что вам нужно надлежащее состояние join. , , как правило, никогда запятыми запятыми в пункте from.

У MySQL есть функция, которая позволяет использовать псевдонимы в предложении having. Таким образом, ваш запрос будет запущен, если он написан как:

SELECT t1.customer_name, t1.total, t2.customer_name, t2.total, 
     (t1.total - t2.total) as var_1 
FROM topuserslcy t1 CROSS JOIN 
    topuserslcy t2 
WHERE t1.report_date = '2015-12-22' AND 
     t2.report_date = '2015-12-23' 
HAVING var_1 > 0; 
+0

потрясающий! идеальный ответ. Благодаря :) –

0

ANSI SQL-совместимый ответ, используйте производную таблицу. Проверьте var_1 на верхнем уровне:

select * from 
(
SELECT t1.customer_name, t1.total, t2.customer_name, t2.total, 
     (t1.total - t2.total) as var_1 
FROM topuserslcy t1, topuserslcy t2 
WHERE t1.report_date = '2015-12-22' AND 
     t2.report_date = '2015-12-23' 
) dt 
WHERE var_1 > 0; 

(Но почему нет РЕГИСТРИРУЙТЕСЬ состояние?)

0

Попробуйте это:

SELECT temp.* FROM (SELECT t1.customer_name, t1.total, t2.customer_name, t2.total, 
     (t1.total - t2.total) as var_1 
FROM topuserslcy t1, topuserslcy t2 
WHERE t1.report_date = '2015-12-22' AND 
     t2.report_date = '2015-12-23') as temp WHERE temp.var_1 > 0; 
Смежные вопросы