Я пытаюсь написать запрос, чтобы вернуть идентификатор последней версии рыночного индекса, хранящегося в базе данных.Что случилось с этим вложенным запросом?
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-запрос, используемый для определения последнего номера версии, который также работает, однако, когда я пытаюсь использовать результат, возвращаемый sub-запросом во внешнем (родительском?) запросе, он возвращает 0 строки - что я здесь делаю неправильно?
Кстати, я также попробовал IN CLAUSE
вместо строгого матча равенства т.е.
... AND miv.version_num IN (SUB QUERY)
Это также привел к 0 строк, хотя, как и раньше, при запуске родительского запроса с жестко закодированным номером версии, я получаю 1 строка возвращена (как и ожидалось).
BTW Я использую postgeresql, но я предпочитаю, чтобы решение было db агностиком.
У вас пытались дать псевдоним подзапросам? –
Как «market_index_id» может быть как внешним ключом к 'ref_market_index', так и идентификатором версии, которую вы ищете? Не всегда ли значение 'ref_market_index.id' для соответствующей записи? Кроме того, ваш подзапрос не имеет никакого отношения к основной таблице, поэтому как найти максимальный номер версии, относящийся к записи 'mi.id'? – mellamokb