6

次のような直接値ではなく、列名で BETWEEN を使用しようとしています。

SELECT * FROM table WHERE column1 BETWEEN column2 AND column3;

これは17行のようなものを返していますが、私が書くと:

SELECT * FROM table WHERE (column1 <= column2 AND column1 >= column3) OR (column1 >= column2 AND column1 <= column3)

私は約600行を取得します。どちらの場合も、column1の値が実際には中間値である行のみを取得しますが、2番目の方法ではより多くの結果が得られるため、1番目の方法には問題があります。

問題は、純粋な値の代わりに列名で BETWEEN 句を使用することにあると思われます.SQLが列名を実際の値に変換しています..奇妙ですが、誰か教えてください。ありがとう

4

3 に答える 3

11
SELECT * FROM table WHERE column1 BETWEEN column2 AND column3; # gives 17 rows

と同じです

SELECT * FROM table WHERE (column1 >= column2 AND column1 <= column3) # gives 17 rows

ご確認のうえ、

(column1 <= column2 AND column1 >= column3)

これはORed であり、追加の行を取得します。

于 2010-09-19T18:08:32.730 に答える
2

Between A And BA<Bつまり、Between の最初の式 ( A) が 2 番目の式より小さい( )と仮定しB、反対のオプションをチェックしたり実行したりしません。

Where 3 Between 4 And 2 たとえば、行を配置しない場合、次のように返されます。

または、あなたが書くなら

Select Case When 3 Between 4 and 2 then 'true' else 'false' end

それは戻ってきますfalse

于 2010-09-19T18:22:51.413 に答える
0

2 つのステートメントのロジックは同じではありません。

SELECT * FROM table WHERE (column1 <= column2 AND column1 >= column3) OR (column1 >= column2 AND column1 <= column3)

2 つの節があります。最初のものを削除すると、 between ステートメントと同じ結果が得られます。

SELECT * FROM table WHERE (column1 >= column2 AND column1 <= column3)
于 2010-09-19T18:13:21.833 に答える