データベースに格納されている市場指数の最新バージョンの 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を使用していますが、解決策がデータベースに依存しないことを好みます。