次の SQL クエリで構文エラーが発生する理由がわかりません。
クエリ (および後述のスキーマ/作成済みビュー) の目的は、すべてのマネージャーの平均給与よりも多くの収入を得ているマネージャーの名前と会社名を見つけることです。
これが私が書いたクエリとそれに付随するエラーです:
select ManagerLastname, MFirstName, MMidInitial, company_name
from ManagerInfo, Works
(select avg(salary) as AverageManagerSalary, Lastname
from Works,
group by Lastname) Work1
where ManagerInfo.ManagerLastname = Work1.Lastname and
Works.salary > Work1.AverageManagerSalary;
ORA-00933: SQL command not properly ended : select ManagerLastname, MFirstName, MMidInitial, company_name from ManagerInfo, Works (select avg(salary) as AverageManagerSalary, Lastname from Works, group by Lastname) Work1 where ManagerInfo.ManagerLastname = Work1.Lastname and Works.salary > Work1.AverageManagerSalary
このクエリのどこに構文エラーがあるのかわかりません。かっこと「句読点」はすべて正しいと思ったので、ネストされたselectステートメントの問題だと思いますが、そのステートメント内で何を変更する必要があるかわかりません...
これが私のデータベースの全体的なスキーマです。このスキーマと私が作成した上記のビューは正しく「コンパイル」されるため、エラーはクエリ コード自体に関係していることがわかります。
create table Employee(
Lastname varchar(10),
FirstName varchar(10),
MidInitial char(1),
gender char(1),
street varchar(10),
city varchar(10),
primary key(Lastname, FirstName, MidInitial));
create table company(
company_name varchar(20),
city varchar(10),
primary key(company_name));
create table Works(
Lastname varchar(10),
FirstName varchar(10),
MidInitial char(1),
company_name varchar(20),
salary numeric(8,2),
primary key(Lastname, FirstName, MidInitial, company_name),
foreign key(Lastname, FirstName, MidInitial) references Employee,
foreign key(company_name) references company);
create table Manages(
Lastname varchar(10),
FirstName varchar(10),
MidInitial char(1),
ManagerLastname varchar(10),
MFirstName varchar(10),
MMidInitial char(1),
start_date date,
primary key(Lastname, FirstName, MidInitial, ManagerLastname, MFirstName, MMidInitial),
foreign key(Lastname, FirstName, MidInitial) references Employee);
create view ManagerInfo as
(select distinct ManagerLastname, MFirstName, MMidInitial, street, city
from Manages, Employee
where Manages.ManagerLastname = Employee.Lastname and
Manages.MFirstName = Employee.FirstName and
Manages.MMidInitial = Employee.MidInitial);
ちなみに、SQL for Oracle 11g R2 を使っています。
ご協力いただきありがとうございます。とても有難い。