2011-10-21 71 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