从SQL中有2个外键的表中选择数据-标识符无效

从SQL中有2个外键的表中选择数据-标识符无效,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 = Pr

我对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:“雇员”,“雇员ID”:无效标识符::

试试这个

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;

由于您为
employees
表指定了别名
e
,因此必须使用该别名来引用该表的列

您应该使用以下查询:

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;
选择e.employee\u id、e.name、p.project\u name
来自雇员e
加入项目p on
E.employee\u id=Projects\u Employees.employeer\u id上的内部联接项目\u员工
Projects.project\u id=Projects\u Employees.project\u id上的内部联接项目;

另外,为什么在查询中两次使用
项目
表?如果不需要,您可以删除一个。

请不要将
联接和显式联接语法组合在一起。如果引入别名,则应在其他引用中使用它们……显式联接在隐式联接之前进行计算,因此第一个联接不知道Employee表。但是,没有效果: