使用SQL连接两张表时部分字段返回NULL值的技术咨询
关联PROJECT与ASSIGNMENT查询时字段返回NULL的排查思路
嘿,我来帮你捋捋这个问题——你说关联这两张表查询时,有两个字段返回NULL,先把你提供的表结构整理出来(ASSIGNMENT的语句没写完,我就按现有内容放了):
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 N...
下面是几个常见的排查方向,你可以逐一核对:
- JOIN类型是否符合预期:如果用了
LEFT JOIN(比如PROJECT LEFT JOIN ASSIGNMENT ON ...),那当某个PROJECT没有对应的ASSIGNMENT记录时,ASSIGNMENT侧的所有字段都会返回NULL。如果你的需求是只保留两边都匹配的记录,换成INNER JOIN就能解决;如果确实需要保留所有PROJECT记录,那可以用COALESCE()把NULL替换成你想要的默认值,比如COALESCE(ASSIGNMENT.HoursWorked, 0)。 - 关联条件是否正确:一定要确认关联的是
PROJECT.ProjectID = ASSIGNMENT.ProjectID,要是不小心写错了关联字段(比如误关联了Department或者其他字段),会导致大量匹配失败,出现NULL。 - 字段本身允许NULL:看PROJECT表的
StartDate和EndDate本身就定义为NULL,如果返回NULL的是这两个字段,那大概率是表中这些字段本身就没有值,和关联操作无关,你可以单独查PROJECT表确认数据。 - 数据是否存在缺失:如果是ASSIGNMENT的字段返回NULL,可能是这个PROJECT确实没有对应的员工分配记录,你可以单独查
ASSIGNMENT WHERE ProjectID = 你的项目ID看看有没有数据。
要是能把你的查询SQL贴出来,再说明下具体是哪两个字段返回NULL,我能更精准地帮你定位问题哦~
内容的提问来源于stack exchange,提问作者idksoiputthis
相关产品推荐
相关产品推荐

