我想寫一個查詢來返回存儲在數據庫中的市場索引的最新版本的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語句的工作原理 - 另外,當我測試用於確定最新版本號的SUB查詢時,這也起作用 - 但是,當我嘗試使用外部(父級?)查詢中的子查詢返回的結果時,它將返回0行 - 我在這裏做錯了什麼?
順便說一句,我也嘗試過的IN CLAUSE
,而不是全等匹配即
... AND miv.version_num IN (SUB QUERY)
這也導致了0行,雖然和以前一樣,運行用硬編碼的版本號父查詢的時候,我得到1行返回(如預期)。
順便說一句我正在使用postgeresql,但我更喜歡解決方案是數據庫不可知的。
你有沒有嘗試給子查詢別名? –
'market_index_id'既可以是'ref_market_index'的外鍵,也可以是您要查找的版本記錄的ID?對於匹配記錄,它不會總是'ref_market_index.id'的值嗎?另外,你的子查詢與主表沒有任何關係,那麼它如何找到與「mi.id」記錄相關的最大版本號? – mellamokb