#sql #oracle
#sql #Oracle
Вопрос:
У меня есть запрос, как показано ниже,
select a,b,c, (select h from table 1 where field = a and field2 = b) as alias_column, d
from table
group by a,b,c, (select h from table 1 where field = a and field2 = b) , d
Я получаю сообщение об ошибке типа,
ORA-22818: subquery expressions not allowed here
22818. 00000 - "subquery expressions not allowed here"
*Cause: An attempt was made to use a subquery expression where these
are not supported.
*Action: Rewrite the statement without the subquery expression.
Error at Line: 84 Column: 2
Я думаю, это связано с тем, что where clause
в подзапросе, который добавляется в group by
Смотрите подзапрос, (select * from table 1 where field = a and field2 = b)
has a
и b
поля из родительской таблицы.
Пожалуйста, помогите.
Комментарии:
1. Попробуйте заменить подзапрос в group by на alias_column
2. Это не работает .. Когда я гуглю, он говорит, что я должен поместить весь подзапрос в group by
3. В подзапросе объединено несколько таблиц. Я не упоминал об этом в вопросах.
4. Не могли бы вы настроить sqlfiddle.com чтобы отладить вашу проблему?
5. вы группируетесь, используя подзапрос? это невозможно сделать .. буквально группировка некоторых данных — это то, что у вас есть из предложений FROM и WHERE ..
Ответ №1:
Если подзапрос ( select * from table 1 where field = a and field2 = b
) возвращает только одно значение, это должно сработать:
select * from
(select a,b,c, (select * from table 1 where field = a and field2 = b) as alias_column, d
from table)
group by a,b,c, alias_column , d
Но если подзапрос ( select * from table 1 where field = a and field2 = b
)
не возвращает только одно значение, вы получите сообщение об ошибке ниже:
ORA-01427: single-row subquery returns more than one row
01427. 00000 - "single-row subquery returns more than one row"
Комментарии:
1. @Sahal хорошо, вы пробовали с запросом, который я предложил?
2. Этот ответ не имеет отношения к этому вопросу.
Ответ №2:
Почему вы выполняете group by, когда не задействованы агрегатные функции?
Используйте DISTINCT
вместо этого, т.е.
SELECT DISTINCT a,b,c,
(select * from table 1
where field = a and field2 = b) as alias_column, d
from table