使用3个表的JOINS处理我的代码时遇到麻烦

时间:2019-02-02 12:02:02

标签: sql oracle12c

我需要创建一个显示以下内容的报告:FIRSTNAME,SALARY和另外的1000个将列重命名为BONUS,获得DEPARTMENT_NAME,DEPARTMENT_ID和CITY。使用“打开”条件连接三个表。

对此最合适的查询是什么?

我目前正在为此使用Oracle 12c。 我尝试过的代码之一。

SELECT FIRSTNAME, SALARY, CITY, DEPARTMENT_NAME, DEPARTMENT_ID
FROM EMPLOYEES
JOIN LOCATIONS AND DEPARTMENTS ON DEPARTMENT_NAME=DEPARTMENT_ID;

表格代码

    CREATE TABLE EMPLOYEES(
EMPLOYEE_ID NUMBER(6) PRIMARY KEY NOT NULL,
FIRSTNAME VARCHAR(10),
LASTNAME VARCHAR(10)NOT NULL,
JOB_ID VARCHAR(10),
SALARY NUMBER(8,2),
MANAGER_ID NUMBER(6),
DEPARTMENT_ID NUMBER(4));
INSERT INTO EMPLOYEES VALUES (100,'STEVEN','KING','AD_PRES',24000,NULL,90);
INSERT INTO EMPLOYEES VALUES (101,'NENA','KOCHAR','AD_VP',17000,100,90);
INSERT INTO EMPLOYEES VALUES (102,'LEX','DE HAAN','AD_VP',17000,100,90);
INSERT INTO EMPLOYEES VALUES (103,'ALEXANDER','HUNOLD','IT_PROG',NULL,101,60);
INSERT INTO EMPLOYEES VALUES (104,'BRUCE','ERNST','IT_PROG',6000,102,60);
INSERT INTO EMPLOYEES VALUES (107,'DIANA','LORENTZ','IT_PROG',4200,103,60);
INSERT INTO EMPLOYEES VALUES (124,'KEVIN','MOURGOS','ST_MAN',5800,100,50);
INSERT INTO EMPLOYEES VALUES (141,'TRINA','RAJS','ST_CLERK',3500,124,50);
INSERT INTO EMPLOYEES VALUES (142,'CURTIS','DAVIES','ST_CLERK',3100,124,50);
INSERT INTO EMPLOYEES VALUES (143,'RANDALL','MATOS','ST_CLERK',2600,124,50);
INSERT INTO EMPLOYEES VALUES (144,'PETER','VARGAS','ST_CLERK',2500,124,50);
INSERT INTO EMPLOYEES VALUES (149,'ELENI','ZLOTKEY','SA_MAN',10500,100,80);
INSERT INTO EMPLOYEES VALUES (174,'ELLEN','ABEL','SA_REP',11000,149,50);
INSERT INTO EMPLOYEES VALUES (176,'JONATHAN','TAYLOR','SA_REP',8600,149,80);
INSERT INTO EMPLOYEES VALUES (178,'KIMBERLEY','GRANT','SA_REP',7000,149,NULL);
INSERT INTO EMPLOYEES VALUES (200, 'JENNIFER','WHALEN','AD_ASST',4400,101,10);
INSERT INTO EMPLOYEES VALUES (201,'MICHAEL','HARTSTEIN','MK_MAN',13000,100,20);
INSERT INTO EMPLOYEES VALUES (202,'PAT','FAY','MK_REP',6000,201,20);
INSERT INTO EMPLOYEES VALUES (205,'SHELLEY','HIGGINS','AC_MGR',12000,101,110);

    INSERT INTO EMPLOYEES VALUES (206,'WILLIAM','GIETZ','AC_ACCOUNT',8300,205,110);

    CREATE TABLE DEPARTMENTS(
DEPARTMENT_ID NUMBER(4) PRIMARY KEY,
DEPARTMENT_NAME VARCHAR(15) NOT NULL,
MANAGER_ID NUMBER(6),
LOCATION_ID NUMBER(4),
CONSTRAINT fk_locid FOREIGN KEY (LOCATION_ID)
REFERENCES LOCATIONS(LOCATION_ID));
INSERT INTO DEPARTMENTS VALUES(10,'ADMINISTRATION',200,1700);
INSERT INTO DEPARTMENTS VALUES(20,'MARKETING',201,1800);
INSERT INTO DEPARTMENTS VALUES(50,'SHIPPING',124,1500);
INSERT INTO DEPARTMENTS VALUES(60,'IT',103,1400);
INSERT INTO DEPARTMENTS VALUES(80,'SALES',149,2500);
INSERT INTO DEPARTMENTS VALUES(90,'EXECUTIVE',100,1700);
INSERT INTO DEPARTMENTS VALUES(100,'ACCOUNTING',205,1700);
INSERT INTO DEPARTMENTS VALUES(190,'CONTRACTING',NULL,1700);
INSERT INTO DEPARTMENTS VALUES(110,'HRD',205,1800);
INSERT INTO DEPARTMENTS VALUES(1115,'CUSTOMER',NULL,2500);

    CREATE TABLE LOCATIONS(
LOCATION_ID NUMBER(4) PRIMARY KEY NOT NULL,
STREET_ADDRESS VARCHAR(20),
POSTAL_CODE VARCHAR(10),
CITY VARCHAR(15) NOT NULL,
STATE_PROVINCE VARCHAR(10),
COUNTRY_ID CHAR(2));
INSERT INTO LOCATIONS VALUES(1400, '2014 JABBERWACKY RD',26192, 'SOUTHLAKE', 'TEXAS', 'US');
INSERT INTO LOCATIONS VALUES(1500, '2011 INTERIORS RD',99236, 'SAN FRANCISCO', 'CALIFORNIA', 'US');
INSERT INTO LOCATIONS VALUES(1700, '2004 CHARADE RD',98199, 'SEATLE', 'WASHINGTON', 'US');
INSERT INTO LOCATIONS VALUES(1800, '460 BLOOR ST.','ON M5S', 'TORONTO', 'ONTARIO', 'CA');
INSERT INTO LOCATIONS VALUES(2500, 'MAGDALEN CENTER','OX 9ZB', 'OXFORD', 'OXFORD', 'UK');
INSERT INTO LOCATIONS VALUES(2400, '365 SEATLE','ST 99W', 'OXFORD', 'OXFORD', 'US');

我希望输入的内容正确,但出现“缺少关键字”错误

1 个答案:

答案 0 :(得分:0)

AND不属于JOIN子句。它不是关系运算符。

大概是您打算的:

SELECT e.FIRSTNAME, e.SALARY, l.CITY, 
       d.DEPARTMENT_NAME, d.DEPARTMENT_ID
FROM EMPLOYEES e JOIN
     DEPARTMENTS d
     ON e.DEPARTMENT_ID = d.DEPARTMENT_ID JOIN
     LOCATIONS l
     ON d.LOCATION_ID = l.LOCATION_ID;

请注意,除了修复AND LOCATION外,我还介绍了表别名和限定的列名。您的ON子句完全错误。

Here是一个db <>小提琴,说明了该语法有效。

相关问题