简体   繁体   中英

Select data from table with 2 foreign keys in SQL - invalid identifier

I have a problem with SQL query. I have 3 tables, and I want to select people assigned to projects. Here's my statement:

 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;

and the code:

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);
     

And im getting ORA-00904: "EMPLOYEE"."EMPLOYEE_ID": invalid identifier : http://sqlfiddle.com/#!4/c70f4/1

try this one.

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;

Because you have given alias e to employees table, you will have to use that alias to refer columns of that table.

You should use following query:

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;

Also, why you have used projects table twice in your query? You can remove one if not needed.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM