#sql
#sql
Вопрос:
У меня проблема с SQL-запросом. У меня есть 3 таблицы, и я хочу выбрать людей, назначенных для проектов. Вот мое утверждение:
SELECT e.employee_id, e.name, p.project_name from Employee e, Projects p
INNER JOIN Projects_Employees ON Employee.employee_id = Projects_Employees.employee_id
INNER JOIN Projects ON Projects.project_id = Projects_Employees.project_id;
и код:
CREATE TABLE Employee (
employee_id NUMBER(10) NOT NULL PRIMARY KEY,
name VARCHAR2(50) NOT NULL,
address VARCHAR2(100) NOT NULL
);
CREATE TABLE Projects (
project_id NUMBER(10) NOT NULL PRIMARY KEY,
project_name VARCHAR(200) NOT NULL
);
CREATE TABLE Projects_Employees (
id NUMBER(10) NOT NULL PRIMARY KEY,
employee_id NUMBER(10) NOT NULL,
project_id NUMBER(10) NOT NULL,
CONSTRAINT employee_fk FOREIGN KEY (employee_id) REFERENCES Employee(employee_id),
CONSTRAINT project_fk FOREIGN KEY (project_id) REFERENCES Projects(project_id)
);
INSERT INTO
Employee(employee_id, name, address) VALUES
(1, 'Joe Doe', '11 Henry Smith St.Chelsea, MA 02150');
INSERT INTO
Employee(employee_id, name, address) VALUES
(2, 'James Doe', '74 East Sierra Ave. Batavia, OH 45103');
INSERT INTO
Projects(project_id, project_name)
VALUES (1, 'YYY');
INSERT INTO
Projects(project_id, project_name)
VALUES (2, 'XXX');
INSERT INTO Projects_Employees(id, project_id, employee_id)
VALUES (1, 1, 1);
INSERT INTO Projects_Employees(id, project_id, employee_id)
VALUES (2, 1, 2);
INSERT INTO Projects_Employees(id, project_id, employee_id)
VALUES (3, 2, 1);
И я получаю ORA-00904: "EMPLOYEE"."EMPLOYEE_ID": invalid identifier
: http://sqlfiddle.com /#!4/c70f4/1
Комментарии:
1. Пожалуйста, не комбинируйте
,
соединения и явный синтаксис соединения. И если вы вводите псевдонимы, вы должны использовать их в других своих ссылках2. … и явные соединения оцениваются перед неявными, поэтому первое ВКЛЮЧЕНИЕ не знает о таблице Employee .
Ответ №1:
попробуйте это.
SELECT Employee.name,Projects_Employees.employee_id,Projects.project_name
FROM Projects_Employees
INNER JOIN Employee ON Employee.employee_id = Projects_Employees.employee_id
INNER JOIN Projects ON Projects.project_id = Projects_Employees.project_id;
Ответ №2:
Поскольку вы присвоили псевдоним e
employees
таблице, вам придется использовать этот псевдоним для ссылки на столбцы этой таблицы.
Вы должны использовать следующий запрос:
SELECT e.employee_id, e.name, p.project_name
from Employee e
JOIN Projects p on <join condition>
INNER JOIN Projects_Employees ON E.employee_id = Projects_Employees.employee_id
INNER JOIN Projects ON Projects.project_id = Projects_Employees.project_id;
Кроме того, почему вы дважды использовали projects
таблицу в своем запросе? Вы можете удалить один, если он не нужен.
Комментарии:
1. Тем не менее, никакого эффекта: sqlfiddle.com /#!4/c70f4/15