2015-07-07 2 views
0

Это мой запрос sql, где я получаю сообщение об ошибке в выражении AS.установка псевдонима в столбцах mysql с математическими операторами

select a.*, b.*, (a.date - b.date) AS before 
from tbl A a join tbl B b 
on a.id = b.id 
where (a.date - b.date) < 5 and (a.date - b.date) > 0; 

Как я могу сделать свой SQL-запрос таким и работать?

select a.*, b.*, (a.date - b.date) AS before 
from tbl A a join tbl B b 
on a.id = b.id 
where before < 5 and before > 0; 
+1

Какое сообщение об ошибке? –

+1

Просто комментарий, вы можете использовать оператор «BETWEEN», чтобы избежать как минимум, так и больше условий. – AdamMc331

+1

@ McAdam331 'BETWEEN' включен. – Uueerdo

ответ

2

before - зарезервированное слово. Используйте что-нибудь другое или использовать кавычку:

select a.*, b.*, (a.date - b.date) AS datediff 
from tbl A a join 
    tbl B b 
    on a.id = b.id 
where (a.date - b.date) < 5 and (a.date - b.date) > 0; 

Список зарезервированных слов here. Before используется в определении триггеров (и, возможно, в других местах).

EDIT:

Для вашего второго вопроса, то вы можете использовать пункт having, если вы действительно хотите:

select a.*, b.*, (a.date - b.date) AS datediff 
from tbl A a join 
    tbl B b 
    on a.id = b.id 
having datediff < 5 and datediff > 0; 

Это расширение MySQL к having. Это выглядит очень неудобно для всех, кто не знаком с ним (это просто кричит «где находится group by»). Но это может быть полезно, особенно для более длинных, более сложных выражений.

+0

Сначала вы ответили быстрее меня и отредактировали быстрее, чем я мог комментировать зарезервированные слова. Я бы дал вам +2 за скорость, если мог. – AdamMc331

+2

О, этот класс ввода, который я взял в десятом классе, был, вероятно, самым полезным классом, который я когда-либо брал. –

+0

и я думал, что это что-то связано с операторами математики .. спасибо, я узнал что-то новое сегодня! – jxn

0

Можно увидеть несколько вопросов: 1) 1-й запрос ... 'before' является зарезервированным словом. Вы не можете использовать его как псевдоним. Назовите свою колонку чем-то еще. 2) Второй запрос ... вы не сможете ссылаться на псевдоним в рамках одного и того же запроса. 3) Вы ищете результаты, которые МЕНЬШЕ, ЧЕМ 5 И БОЛЬШЕ ЧЕМ 0?

+0

Я не понимаю, почему ваша точка номер три является проблемой, если только вы не ссылаетесь на то, что они являются датами, значениями меньше 5 и больше 0. – AdamMc331

+0

Да, но я бы подумал, что они отменяют друг друга ... разве это не OR? – JDx

+0

Нет, я думаю, что они делают то, что хотят. Считайте, что это эквивалентно: 'WHERE column IN (1, 2, 3, 4)', потому что это в основном то, что он делает, если это делает его более понятным для вас. – AdamMc331

Смежные вопросы