从SQL中有2个外键的表中选择数据-标识符无效
我对SQL查询有问题。我有3个表,我想选择分配给项目的人员。以下是我的声明:从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
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表。但是,没有效果: