#sql #oracle
#sql #Oracle
Вопрос:
У меня есть простой SQL-запрос, используемый в oracle 11g
select something from sc where sc.column satisfies something
но я не могу ссылаться на SC в разделе where composite, любой может помочь объяснить это, заранее спасибо.
—второе редактирование: я протестировал команду sql в oracle 19c, она работает, но в 11g она не работает.
содержание таблицы
create table sc( sno varchar2(10), cno varchar2(10), score number(4,2), constraint pk_sc primary key (sno,cno) );
примеры данных
insert into sc values ('s001','c001',78.9); insert into sc values ('s002','c001',80.9); insert into sc values ('s003','c001',81.9); insert into sc values ('s004','c001',60.9); insert into sc values ('s001','c002',82.9); insert into sc values ('s002','c002',72.9); insert into sc values ('s003','c002',81.9); insert into sc values ('s001','c003','59');
команда sql
SELECT SNO FROM SC A WHERE 0 = (SELECT COUNT(*) FROM (SELECT B.CNO FROM SC B WHERE B.SNO = 's001' MINUS SELECT C.CNO FROM SC C WHERE A.SNO = C.SNO) --this is the error location, oracle reports invalid identifier A. );
Комментарии:
1. Что у вас за СУБД?
2. Не могли бы вы предоставить некоторые примеры данных и ожидать результата?
3. A определяется за пределами вашего подвыборки, идентификатор, недоступный оттуда
4. Я запустил это с помощью фиктивного стола SC, и это сработало. Пожалуйста, покажите полное сообщение об ошибке и определение таблицы.
5. База данных @D-Shih-это oracle 11g
Ответ №1:
Я бы попробовал предложение exists вместо where 0 =
SELECT SNO FROM SC A WHERE not exists (SELECT B.CNO FROM SC B WHERE B.SNO = 's001' MINUS SELECT C.CNO FROM SC C WHERE A.SNO = C.SNO) --this is the error location, oracle reports undefined A.
Я предполагаю, что вы хотите вернуться туда, где нет совпадения?
Комментарии:
1. этот код не может работать на oracle 11g, но последняя версия 19c в порядке. Я хочу знать, почему.
Ответ №2:
Если вы пытаетесь получить CNO, которые находятся не только в SNO «s001».
Тогда, может быть, это.
SELECT DISTINCT SNO, cno FROM SC sc WHERE SNO = 's001' AND EXISTS ( SELECT 1 FROM SC sc2 WHERE sc2.CNO = sc.CNO AND sc2.SNO != sc.SNO )