2011-10-21 70 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它顯示'無法執行查詢'。我在哪裏做錯了?請幫助

編輯:

我有一個表,其中有兩個字段,START_FREQUENCYSTOP_FREQUENCY。我試圖提取頻率範圍內的所有值。例如說

START_FREQUENCY STOP_FREQUENCY 
1   0.4   0.9 
2   0.5   1.4 
3   0.8   1.9 

當用戶輸入start frequency = 0.4 and stop frequency = 1.9他應該得到的Row1Row2Row3結果。

+0

你的意思是選擇做什麼,我想你需要查詢子:) – xdazz

回答

3

你內心的選擇不應該被引用。試試這個:

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

好吧,我去掉引號。當我試圖在phpmyadmin的SQL查詢,它說'#1242 - 子查詢返回多個行' – AssamGuy