2011-10-21 18 views
0

浮動小数点値を比較したいです。するには、私のクエリは次のようになります:ネストされたクエリのSQLは、実行することができません

SELECT * FROM pricelist WHERE START_FREQUENCY >= '(
    SELECT START_FREQUENCY 
    FROM pricelist 
    WHERE START_FREQUENCY BETWEEN '0.49999' AND '0.50001' 
)' AND STOP_FREQUENCY <= '(
    SELECT STOP_FREQUENCY 
    FROM pricelist 
    WHERE STOP_FREQUENCY BETWEEN '0.59999' AND '0.60001' 
)' 

私のPHPでは、 'クエリを実行できません'と表示されています。どこが間違っているの?

EDITを助けてください:

私は二つのフィールド、START_FREQUENCYSTOP_FREQUENCYがあるテーブルを持っています。私は周波数範囲内に来るすべての値を抽出しようとしています。たとえば、ユーザーがstart frequency = 0.4 and stop frequency = 1.9を入力

START_FREQUENCY STOP_FREQUENCY 
1   0.4   0.9 
2   0.5   1.4 
3   0.8   1.9 

たとき、彼はRow1Row2Row3の結果を取得する必要がありますと言います。

+0

何を選択するのに意味ですか、私はあなたがサブクエリ:) – xdazz

答えて

3

内側のSELECTは引用しないでください。これを試してみてください:

SELECT * FROM pricelist WHERE START_FREQUENCY >= (
    SELECT START_FREQUENCY 
    FROM pricelist 
    WHERE START_FREQUENCY BETWEEN 0.49999 AND 0.50001 
) AND STOP_FREQUENCY <= (
    SELECT STOP_FREQUENCY 
    FROM pricelist 
    WHERE STOP_FREQUENCY BETWEEN 0.59999 AND 0.60001 
) 

また、数字の前後の引用符を削除しました。 MySQLはそれを背後の数字に変換しますが、データベースを推測してより多くの作業をする必要はありません。

SELECT * 
FROM pricelist 
WHERE START_FREQUENCY >= '...'0.49999' AND '0.50001'...' 
    AND STOP_FREQUENCY <= '...'0.59999' AND '0.60001'...' 

そして'string'0.49999'が有効ではありません。

あなたのバージョンは、この構造を有しています。


更新:あなただけこれを過度に複雑しているように聞こえます。私はあなただけ(あなたの0.4と1.9を使用して)これをしたいと思う:

select * 
from pricelist 
where START_FREQUENCY >= 0.4 
    and STOP_FREQUENCY <= 1.9 
+0

おかげで... dkaminsへの私のコメントを参照してください。 – AssamGuy

+0

@AssamGuy:サブクエリは単一の結果を返す必要があります。それらを列の値と比較するには '> ='と '<='を使います。このクエリで何を達成しようとしていますか? –

+0

私の編集した質問を参照してください – AssamGuy

1

データベースで実際のエラーが発生するのを確認するには、MySQLコマンドラインクライアントまたはより直接的な環境でクエリを実行してください。

ほとんどの場合、サブクエリの周りに引用符を使用することが関係している可能性があります。

+0

は、[OK]を、私は引用符を削除する必要があるんだと思います。 phpmyadminのsqlクエリで試してみたところ、 '#1242 - サブクエリが1行以上を返す ' – AssamGuy

関連する問題