Выберите данные из таблицы с 2 внешними ключами в SQL — недопустимый идентификатор

#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