Sql 这个嵌套查询有什么问题?
我正在尝试编写一个查询,以返回存储在数据库中的最新版本的市场指数的idSql 这个嵌套查询有什么问题?,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
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的正确值。