Несколько MySql, ГДЕ Между Пунктами - PullRequest
4 голосов
/ 11 марта 2011

Программисту MySql для новичков спасибо за терпение.

Я пытаюсь отследить число Id в таблице, где выполняются 3 различных условия, это то, что получил Iv, однако запрос на запрос возвращает все результаты, где есть явные совпаденияв таблице.Мысли?

SELECT *
FROM `table`
WHERE `x` BETWEEN 80 AND 20
AND `y` BETWEEN 120 AND 20
AND `z` BETWEEN 40 AND 10
LIMIT 0 , 30

Прав ли я теоретически думать, что это должно работать?

Ответы [ 3 ]

7 голосов
/ 11 марта 2011

Близко, но без сигары.:)

SELECT * FROM table 
WHERE (x BETWEEN 20 AND 80) AND 
(y BETWEEN 20 AND 120) AND 
(z BETWEEN 10 AND 40) LIMIT 0 , 30

Для объяснения, серверы SQL обычно оценивают x BETWEEN val1 AND val2 так же, как x >= val1 AND x <= val2.При написании исходного запроса первое условие будет x >= 120 AND x <= 20), что, очевидно, не соответствует вашим ожиданиям.

Скобки вокруг различных условий гарантируют, что каждое из них будет полностью оценено до того, как будет рассмотрено И,Большую часть времени в SQL имеет значение, и даже если это не так, то лучше использовать их, чтобы ваши намерения были ясны через 6 месяцев, когда вам (или кому-то еще) придется снова посмотреть на запрос.

2 голосов
/ 11 марта 2011
SELECT * FROM table WHERE 
      (x BETWEEN 20 AND 80) AND 
      (y BETWEEN 20 AND 120) AND 
      (z BETWEEN 10 AND 40) 
LIMIT 0 , 30
1 голос
/ 11 марта 2011

Я думаю, что диапазон должен быть наоборот:

SELECT * FROM table WHERE x BETWEEN 20 AND 80 AND y BETWEEN 20 AND 120 AND z BETWEEN 10 AND 40 LIMIT 0 , 30
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...