5

初心者の MySql プログラマー、忍耐に感謝します。

3 つの異なる条件が満たされているテーブルで Id 番号を追跡しようとしていますが、これは 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

これが機能するはずだと考えるのは理論的に正しいでしょうか?

4

3 に答える 3

8

閉じますが、葉巻はありません。:)

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)、これは明らかに意図したものではありませんでした。

さまざまな条件を括弧で囲んで、AND が考慮される前にそれぞれが完全に評価されるようにします。ほとんどの場合、SQL で違いが生じます。そうでない場合でも、それらを使用することをお勧めします。これにより、6 か月後にあなた (または他の誰か) がクエリを再度確認する必要があるときに、意図が明確になります。

于 2011-03-11T02:39:19.103 に答える
2
SELECT * FROM table WHERE 
      (x BETWEEN 20 AND 80) AND 
      (y BETWEEN 20 AND 120) AND 
      (z BETWEEN 10 AND 40) 
LIMIT 0 , 30
于 2011-03-11T02:38:30.550 に答える
1

範囲は逆にする必要があると思います:

SELECT * FROM table WHERE x BETWEEN 20 AND 80 AND y BETWEEN 20 AND 120 AND z BETWEEN 10 AND 40 LIMIT 0 , 30
于 2011-03-11T02:37:46.083 に答える