Сравните результат выражения as в выражении where - PullRequest
4 голосов
/ 02 декабря 2008

Можно ли создать оператор выбора MySQL, который использует выражение в качестве x, а затем проверяет, находится ли значение для x ниже определенного значения?

SELECT (mytable.field1 + 10) AS x FROM `mytable` WHERE x < 50;

Ответы [ 3 ]

6 голосов
/ 02 декабря 2008

нет, вы действительно должны это сделать

SELECT (mytable.field1 + 10) AS x FROM `mytable` WHERE (mytable.field1 + 10) < 50;
5 голосов
/ 02 декабря 2008

Вы также можете сделать это так:

SELECT *
FROM (
    SELECT (mytable.field1 + 10) AS X
    FROM `MyTable`
) t
WHERE X < 50

В большинстве случаев, вероятно, лучше использовать решение Ника, поскольку оно позволяет серверу применять условие where ранее в процессе. Однако иногда вы захотите сделать это таким образом для ясности в сложных запросах, где другие факторы влияют на производительность.

0 голосов
/ 03 декабря 2008

Я храню выражения в переменных и интерполирую их в нескольких местах для этого:

$x_sql = '(mytable.field1 + 10)';
$SQL = "SELECT $x_sql AS x FROM mytable WHERE $x_sql < 50";

Или, если вас не беспокоит неэффективность, используйте предложение HAVING:

SELECT (mytable.field1 + 10) as x FROM mytable HAVING x < 50;

(вероятно, в равной степени неэффективно для подвыбора, предложенного в другом ответе).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...