Я пытаюсь проработать этот SQL-запрос и постоянно зацикливаюсь на
Команда SQL неправильно завершена
заявление.
Точная ошибка:
AND NOT PROJECT.dnum = EMPLOYEE.dno)) > 10
*
ERROR at line 4:
ORA-00933: SQL command not properly ended
Вот схема:
CREATE TABLE EMPLOYEE (
fname VARCHAR(20),
minit CHAR(1),
lname VARCHAR(20),
ssn INT NOT NULL,
bdate VARCHAR(20),
address VARCHAR(40),
sex CHAR(1) check (sex IN ('M', 'F')),
salary INT CHECK (salary > 20000),
superssn INT,
dno INT,
PRIMARY KEY (ssn)
);
CREATE TABLE DEPARTMENT (
dname VARCHAR(20),
dnumber INT NOT NULL,
mgr_ssn INT,
mgr_start_date VARCHAR(20),
PRIMARY KEY (dnumber)
);
CREATE TABLE DEPTLOCATIONS (
dnumber INT NOT NULL,
dlocation VARCHAR(20) NOT NULL check (dlocation IN ('BELLAIRE', 'SUGARLAND', 'HOUSTON', 'STAFFORD')),
PRIMARY KEY (dnumber, dlocation)
);
CREATE TABLE PROJECT (
pname VARCHAR(20) NOT NULL,
pnumber INT NOT NULL,
plocation VARCHAR(20) CHECK (plocation IN ('BELLAIRE', 'SUGARLAND', 'HOUSTON', 'STAFFORD')),
dnum INT NOT NULL,
PRIMARY KEY (pnumber)
);
CREATE TABLE WORKS_ON (
essn INT NOT NULL,
pno INT NOT NULL,
hours FLOAT check (hours >= 5 AND hours <= 40),
PRIMARY KEY (essn, pno)
);
CREATE TABLE DEPENDENT (
essn INT NOT NULL,
dependent_name VARCHAR(40) NOT NULL,
sex CHAR(1) check (sex IN ('M', 'F')),
bdate VARCHAR(20),
relationship VARCHAR(20) CHECK (relationship IN ('SPOUSE', 'SON', 'DAUGHTER')),
PRIMARY KEY (essn, dependent_name)
);
Я пытаюсь найти сотрудников, чьи зарплаты
выше, чем средняя заработная плата всех сотрудников в том же отделе, и у которых есть два
или больше иждивенцев; затем, для каждого найденного сотрудника, мне нужно проверить, работает ли сотрудник больше, чем
в общей сложности 10 часов в неделю на проектах, не контролируемых их домашним отделом и
напечатать полное имя сотрудника, если так, наряду с зарплатой, количество иждивенцев,
общее количество часов на проектах, контролируемых домашним отделом, и общее количество
часы работы над проектами, контролируемыми другими (т. е. не домашними) отделами
Вот мой SQL-запрос:
SELECT concat(
concat
(EMPLOYEE.fname, ' '|| EMPLOYEE.minit),
' '||EMPLOYEE.lname) as NAME,
EMPLOYEE.ssn,
(select count(*) from dependent where Employee.ssn=dependent.essn) AS Num_Dependents,
(SELECT SUM(hours) FROM EMPLOYEE
JOIN WORKS_ON ON (EMPLOYEE.ssn = WORKS_ON.essn)
JOIN PROJECT ON (PROJECT.pnumber=WORKS_ON.pno)
WHERE PROJECT.dnum = EMPLOYEE.dno)
AS HOME_HOURS,
(SELECT SUM(hours) FROM EMPLOYEE
JOIN WORKS_ON ON (EMPLOYEE.ssn = WORKS_ON.essn)
JOIN PROJECT ON (PROJECT.pnumber=WORKS_ON.pno)
WHERE NOT PROJECT.dnum = EMPLOYEE.dno) AS NOT_HOME_HOURS,
(SELECT EMPLOYEE.salary FROM EMPLOYEE WHERE
EMPLOYEE.salary > (SELECT AVG(salary) FROM EMPLOYEE WHERE EMPLOYEE.dno = dno))
AND
(SELECT SUM(hours) FROM EMPLOYEE
JOIN WORKS_ON ON (EMPLOYEE.ssn = WORKS_ON.essn)
JOIN PROJECT ON (PROJECT.pnumber=WORKS_ON.pno)
AND NOT PROJECT.dnum = EMPLOYEE.dno)) > 10
AND (SELECT COUNT(*) FROM DEPENDENT WHERE essn = ssn) >= 2;
Я знаю, что, вероятно, он отформатирован не так хорошо, как мог бы, но я занимался этим часами, и, кажется, ничто не избавляет от этого
Команда SQL неправильно завершена
ошибка, возникающая при выполнении запроса. Любая помощь или советы будут очень благодарны! Спасибо всем.