Запрос, например:
SELECT SUM(col1 * col3) AS total, col2
FROM table1
GROUP BY col2
работает должным образом при индивидуальном запуске.
Для справки:
table1.col1 -- float
table1.col2 -- varchar2
table1.col3 -- float
Когда этот запрос перемещается в подзапрос, я получаю сообщение об ошибке ORA-01722 со ссылкой на позицию «col2» в предложении select. Более крупный запрос выглядит так:
SELECT col3, subquery1.total
FROM table3
LEFT JOIN (
SELECT SUM(table1.col1 * table1.col3) AS total, table.1col2
FROM table1
GROUP BY table1.col2
) subquery1 ON table3.col3 = subquery1.col2
Для справки:
table3.col3 -- varchar2
Также стоит отметить, что у меня есть другой запрос от Таблица 2, который имеет ту же структуру, что и Таблица 1. Если я использую подзапрос из таблицы 2, он работает. Это никогда не работает при использовании table1.
Конкатенации нет, типы данных совпадают, запрос работает сам по себе ... Я тут в недоумении. Что еще мне следует искать? Какая до боли очевидная проблема смотрит мне в глаза?
(Я не выбирал и не создавал структуры таблиц и не могу их изменить, поэтому ответы на этот вопрос, к сожалению, не помогут.)
Просто для удовольствия назначьте псевдонимы table1
и table3
и используйте их во всех ссылках на столбцы в вашем запросе. Например, SUM(t1.col1 * t1.col3)
вместо SUM(col1*col3)
. Это не имеет значения в опубликованном вами примере, но может пролить свет на ваш реальный (и, предположительно, более сложный) запрос.
@ BarbarosÖzhan table3.col3 - это varchar2, как и table1.col2, к которому я присоединяюсь.
@MatthewMcPeak Они фактически имеют псевдонимы в моем фактическом запросе, в основном потому, что фактические имена таблиц очень длинные. Сам запрос действительно настолько прост, что довольно досадно.
@ Дэвис, извини, хорошо table1.col3! = Table3.col3
@ BarbarosÖzhan Да, извините, двойное использование col3 было неудачным выбором с моей стороны.
попробуйте использовать правильное преобразование float в char ..
SELECT col3, subquery1.total
FROM table3
LEFT JOIN (
SELECT SUM(table1.col1 * table1.col3) AS total, table.1col2
FROM table1
GROUP BY table1.col2
) subquery1 ON to_char(table3.col3) = subquery1.col2
Одно из немногих приведений, которые я, конечно, не пробовал ... поэтому table3.col3 и subquery.col2 были varchar2. Какой здесь секретный соус? : D Я так запуталась. Спасибо!
@davis ... секрет ... посмотрите на определение схемы ... спокойно посмотрите на определение ... не смотрите слишком внимательно и не всегда смотрите на одни и те же вещи ... потому что, если они ошибаются, они останутся неправильными ... в любом случае лучше приведение числа к строке с учетом приведения от строки к числу
Я думаю, что проблема связана с
ON table3.col3 = subquery1.col2
, где col3 -> float и col2 -> varchar2.