Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 缺少右括号-ORA-00907_Oracle - Fatal编程技术网

Oracle 缺少右括号-ORA-00907

Oracle 缺少右括号-ORA-00907,oracle,Oracle,正如鲍勃正确指出的那样,这里面有一个“u”。但现在它说使用不能有限定符 学生: select distinct student.ID from (student join takes using(ID)) join (instructor join teaches using(ID)) using(course_id, sec_id, semester, year) where instructor.name = 'Einstein' 采取: create table student (ID

正如鲍勃正确指出的那样,这里面有一个“u”。但现在它说使用不能有限定符

学生:

select distinct student.ID
from (student join takes using(ID))
join (instructor join teaches using(ID))
using(course_id, sec_id, semester, year)
where instructor.name = 'Einstein'
采取:

create table student
(ID         varchar(5), 
 name           varchar(20) not null, 
 dept_name      varchar(20), 
 tot_cred       numeric(3,0) check (tot_cred >= 0),
 primary key (ID),
 foreign key (dept_name) references department
 on delete set null
 )
讲师:

create table takes
(ID         varchar(5), 
 course_id      varchar(8),
 sec_id         varchar(8), 
 semester       varchar(6),
 year           numeric(4,0),
 grade              varchar(2),
 primary key (ID, course_id, sec_id, semester, year),
 foreign key (course_id,sec_id, semester, year) references section
    on delete cascade,
 foreign key (ID) references student
    on delete cascade
)
教导:

create table instructor
(ID         varchar(5), 
 name           varchar(20) not null, 
 dept_name      varchar(20), 
 salary         numeric(8,2) check (salary > 29000),
 primary key (ID),
 foreign key (dept_name) references department
    on delete set null
)
我已按要求粘贴了结构。我希望这有帮助!
我也尝试过编辑引号,但仍然没有用。

问题不是括号太少,而是括号太多

我在这里猜测了一下,因为我不知道您的表到底是什么样子,但您的SELECT语句应该是:

create table teaches
(ID         varchar(5), 
 course_id      varchar(8),
 sec_id         varchar(8), 
 semester       varchar(6),
 year           numeric(4,0),
 primary key (ID, course_id, sec_id, semester, year),
 foreign key (course_id,sec_id, semester, year) references section
    on delete cascade,
 foreign key (ID) references instructor
    on delete cascade
);
此外,您需要小心使用的编辑器。在你的问题中,围绕“爱因斯坦”的单引号并不是真正的单引号——它们似乎是Unicode撇号,可以由文字处理器(如Microsoft word)添加。字符串常量需要用单引号字符(')包围-使用任何其他字符都会导致错误


祝你好运。

正如Bob Jarvis指出的,第三个
using
子句中应该有下划线的空格;更改这些选项将获得(正如您编辑问题时所说):

因为选择列表有
student.ID
。当您使用
using
子句时,中的列不能在联接表中直接引用,因此您需要执行以下操作:

ORA-25154: column part of USING clause cannot have qualifier
。。。但现在这一切都会过去

select distinct ID
from (student join takes using(ID))
join (instructor join teaches using(ID))
using(course_id, sec_id, semester, year)
where instructor.name = 'Einstein';
。。。因为学生和讲师都有ID列,这大概就是为什么选择列表首先要加前缀的原因。您可以使用内联视图从选择列表范围中丢失讲师ID:

ORA-00918: column ambiguously defined
但实际上,您最好不要在此处使用
,而是使用
上的
语法和简化联接,例如:

select distinct ID
from (student join takes using(ID))
join (select course_id, sec_id, semester, year, name
  from instructor join teaches using(ID)) instructor
using(course_id, sec_id, semester, year)
where instructor.name = 'Einstein';

.

请编辑问题,并包括查询中提到的所有表格的结构(学生、课程、讲师和教师)。不要将表格描述放在注释中-将其编辑到问题中。谢谢。另外-在TEACHES表的联接中,涉及的字段的名称是什么?我注意到
USING
子句中应该有空格,例如
course
id
之间-这两个字段是分开的,还是应该是
course\u id
,或者什么?有什么线索吗?还没有解决!
select distinct ID
from (student join takes using(ID))
join (select course_id, sec_id, semester, year, name
  from instructor join teaches using(ID)) instructor
using(course_id, sec_id, semester, year)
where instructor.name = 'Einstein';
select distinct stu.id
from instructor ins
join teaches tea on tea.id = ins.id
join takes tak on tak.course_id = tea.course_id
and tak.sec_id = tea.sec_id
and tak.semester = tea.semester
and tak.year = tea.year
join student stu on stu.id = tak.id
where ins.name = 'Einstein';