繁体   English   中英

使用SQL连接两个表时,结果中的两个列都为空值

[英]When joining two tables with SQL, I get null values for two of my columns in the results

这些是我创建的表

CREATE TABLE PROJECT 
(
    ProjectID   Int          NOT NULL IDENTITY (1000, 100),
    ProjectName Char(50)     NOT NULL,
    Department  Char(35)     NOT NULL,
    MaxHours    Numeric(8,2) NOT NULL DEFAULT 100,
    StartDate   DateTime     NULL,
    EndDate     DateTime     NULL,

    CONSTRAINT PROJECT_PK PRIMARY KEY (ProjectID),
    CONSTRAINT PROJ_DEPART_FK FOREIGN KEY(Department)
                              REFERENCES DEPARTMENT(DepartmentName)
                                  ON UPDATE CASCADE
);

CREATE TABLE ASSIGNMENT 
(
    ProjectID      Int      NOT NULL,
    EmployeeNumber Int      NOT NULL,
    HoursWorked    Numeric(6,2) NULL,

    CONSTRAINT ASSIGNMENT_PK PRIMARY KEY (ProjectID, EmployeeNumber),
    CONSTRAINT ASSIGN_PROJ_FK FOREIGN KEY (ProjectID)
                              REFERENCES PROJECT (ProjectID)
                                  ON UPDATE NO ACTION
                                  ON DELETE CASCADE,
    CONSTRAINT ASSIGN_EMP_FK FOREIGN KEY (EmployeeNumber)
                             REFERENCES EMPLOYEE (EmployeeNumber)
                                  ON UPDATE NO ACTION
                                  ON DELETE NO ACTION
);

这是我正在运行的查询

SELECT 
    A.ProjectID, E.FirstName, E.LastName, A.HoursWorked
FROM
    ASSIGNMENT A
LEFT JOIN 
    EMPLOYEE E ON A.ProjectID = E.EmployeeNumber

这是我得到的结果

ProjectID   FirstName   LastName    HoursWorked
------------------------------------------------
1000        NULL        NULL        30.00
1000        NULL        NULL        65.00
1000        NULL        NULL        55.00
1100        NULL        NULL        40.00
1100        NULL        NULL        45.00
1200        NULL        NULL        25.00
1200        NULL        NULL        20.00
1200        NULL        NULL        45.00
1200        NULL        NULL        40.00
1300        NULL        NULL        35.00
1300        NULL        NULL        50.00
1400        NULL        NULL        15.00
1400        NULL        NULL        10.00
1400        NULL        NULL        27.50

插入的数据

/*****   PROJECT DATA   *********************************************************/

INSERT INTO PROJECT VALUES(
    '2010 Q3 Product Plan', 'Marketing', 135.00, '10-MAY-10', '15-JUN-10');
INSERT INTO PROJECT VALUES(
    '2010 Q3 Portfolio Analysis', 'Finance', 120.00, '05-JUL-10', '05-JUL-10' );
INSERT INTO PROJECT VALUES(
    '2010 Q3 Tax Preparation', 'Accounting', 145.00, '10-AUG-10', '15-OCT-10');
INSERT INTO PROJECT VALUES(
    '2010 Q4 Product Plan', 'Marketing', 150.00, '10-AUG-10', '15-SEP-10');
INSERT INTO PROJECT (ProjectName, Department, MaxHours, StartDate)              
    VALUES(                                     
    '2010 Q4 Portfolio Analysis', 'Finance', 140.00, '05-OCT-10');          

/*****   ASSIGNMENT DATA   ******************************************************/

INSERT INTO ASSIGNMENT VALUES(1000, 1, 30.0);
INSERT INTO ASSIGNMENT VALUES(1000, 8, 75.0);
INSERT INTO ASSIGNMENT VALUES(1000, 10, 55.0);
INSERT INTO ASSIGNMENT VALUES(1100, 4, 40.0);
INSERT INTO ASSIGNMENT VALUES(1100, 6, 45.0);
INSERT INTO ASSIGNMENT VALUES(1200, 1, 25.0);
INSERT INTO ASSIGNMENT VALUES(1200, 2, 20.0);
INSERT INTO ASSIGNMENT VALUES(1200, 4, 45.0);
INSERT INTO ASSIGNMENT VALUES(1200, 5, 40.0);
INSERT INTO ASSIGNMENT VALUES(1300, 1, 35.0);
INSERT INTO ASSIGNMENT VALUES(1300, 8, 80.0);
INSERT INTO ASSIGNMENT VALUES(1300, 10, 50.0);
INSERT INTO ASSIGNMENT VALUES(1400, 4, 15.0);
INSERT INTO ASSIGNMENT VALUES(1400, 5, 10.0);
INSERT INTO ASSIGNMENT VALUES(1400, 6, 27.5);

当我仅对名字和姓氏列运行查询时,所有名称都显示出来并且绝对不为空。 我对JOIN语句缺乏经验,因此无法确定这是否正确。 我尝试使用“ RiGHT JOIN”,但这使其他两列为NULL,而不是名和姓列。 如何使结果显示时根本没有任何NULL值?

您正在加入项目ID和员工编号。 那没有道理。

一个明智的查询是:

SELECT A.ProjectID, P.ProjectName, P.Department, A.HoursWorked
FROM  ASSIGNMENT A
      PROJECT P
      ON A.ProjectID = P.ProjectId;

如果需要有关雇员的信息,则需要一个EMPLOYEE表。 然后这样的事情会起作用:

SELECT A.ProjectID, E.FirstName, E.LastName, A.HoursWorked
FROM ASSIGNMENT A LEFT JOIN
     EMPLOYEE E 
     ON A.EmployeeNumber = E.EmployeeNumber

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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