SQL Server多列关联两表,过滤关联双方GROUP非空记录的方法
解决SQL Server中关联双方GROUP均非空的查询需求
你的核心需求是筛选出Table2中两端关联实体(FROM和TO对应的Table1记录)的GROUP字段都不为NULL的关联关系,原查询的问题在于只验证了关联其中一端的GROUP状态,无法确保另一端的GROUP也非空。
修改后的查询语句
SELECT t2.ID AS RelationID, t_from.ID AS FromID, t_from.NAME AS FromName, t_from.[GROUP] AS FromGroup, t_to.ID AS ToID, t_to.NAME AS ToName, t_to.[GROUP] AS ToGroup FROM Table2 t2 -- 关联FROM对应的实体 INNER JOIN Table1 t_from ON t2.[FROM] = t_from.ID -- 关联TO对应的实体 INNER JOIN Table1 t_to ON t2.TO = t_to.ID -- 同时过滤两端GROUP非空 WHERE t_from.[GROUP] IS NOT NULL AND t_to.[GROUP] IS NOT NULL;
逻辑说明
- 通过两次
INNER JOIN分别关联Table2的FROM和TO字段到Table1,分别获取关联关系两端的实体信息 - 在
WHERE子句中同时校验两端实体的GROUP字段都不为NULL,确保只有符合要求的关联关系被保留
针对示例数据的预期结果
执行上述查询后,会返回Table2中ID为1、2、3的三条关联记录,这三条记录的两端实体(ID1/2、1/3、2/3)的GROUP均为Group1;而涉及ID4(GROUP为NULL)的关联记录(Table2 ID4、5、6)会被过滤掉。
内容的提问来源于stack exchange,提问作者shaqino
相关产品推荐
相关产品推荐

