Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 这个嵌套查询有什么问题?_Sql_Postgresql - Fatal编程技术网

Sql 这个嵌套查询有什么问题?

Sql 这个嵌套查询有什么问题?,sql,postgresql,Sql,Postgresql,我正在尝试编写一个查询,以返回存储在数据库中的最新版本的市场指数的id SELECT miv.market_index_id market_index_id from ref_market_index_version miv INNER JOIN ref_market_index mi ON miv.market_index_id = mi.id WHERE mi.short_name='dow30' AND miv.version_num = (SELECT MAX(m1.version

我正在尝试编写一个查询,以返回存储在数据库中的最新版本的市场指数的id

SELECT miv.market_index_id market_index_id from ref_market_index_version miv 
INNER JOIN ref_market_index mi ON miv.market_index_id = mi.id 
WHERE mi.short_name='dow30' 
AND miv.version_num = (SELECT MAX(m1.version_num) FROM ref_market_index_version m1 INNER JOIN ref_market_index m2 ON m1.market_index_id = m2.id )
上述SQL语句可以(大致)转换为以下形式:

SELECT some columns FROM SOME CRITERIA MATCHED TABLES 
WHERE mi.short_name='some name'
AND miv.version_num = SOME NUMBER
我不明白的是,当我提供一个实际的数字(而不是子查询)时,SQL语句会起作用——同样,当我测试用于确定最新版本号的子查询时,它也会起作用——然而,当我尝试在外部(父)查询中使用子查询返回的结果时,它返回0行-我在这里做错了什么

顺便说一句,我还在子句中尝试了
,而不是严格的相等匹配,即

... AND miv.version_num IN (SUB QUERY)
这也导致了0行,尽管与以前一样,在使用硬编码版本号运行父查询时,返回了1行(如预期的那样)


顺便说一句,我使用的是postgeresql,但我更喜欢db不可知的解决方案。

问题可能是“dow30”的max(version_num)不存在

请尝试以下相关子查询:

SELECT miv.market_index_id market_index_id
from ref_market_index_version miv  INNER JOIN
     ref_market_index mi
     ON miv.market_index_id = mi.id 
WHERE mi.short_name='dow30' AND
      miv.version_num = (SELECT MAX(m1.version_num)
                         FROM ref_market_index_version m1 INNER JOIN
                              ref_market_index m2
                              ON m1.market_index_id = m2.id
                         where m1.short_name = 'dow30'
                        ) 

我在子查询中添加了where子句。

您是否尝试为子查询提供别名?
market\u index\u id
如何既是
ref\u market\u index
的外键,又是您要查找的版本记录的id?匹配记录的
ref\u market\u index.id
值不是一直都是吗?此外,您的子查询与主表没有任何关系,因此如何查找与记录相关的最大版本号
mi.id
?我认为您没有抓住要点,他没有试图通过'dow30'筛选出子查询,只是外部查询我认为您没有抓住要点。子查询中的max(version_num)是所有mi.short_名称的max。显然,数据中的总最大值与“dow30”的最大值不同。他/她需要获得外部查询所选索引的最大值。那么,你如何解释当他单独运行子查询时,它返回预期值?只有原始提问者才能确定我的答案是否有帮助。不过,我想解释一下你的问题,他/她测试了子查询,看看它是否返回了一个值(确实返回了),但没有测试它是否返回了dow30的正确值。