【发布时间】:2018-01-31 14:45:25
【问题描述】:
我有 2 张桌子:Fields{id, testid, labid, upperlimit, lowerlimit) 和 LabTest{id, testid, labid, upperlimit, lowerlimit)
Sample data: Fields: 0, testid1, 1, 10, 20
1, testid2, 2, 10, 20
LabTest: 0, testid1, 1, 40, 50
1, testid1, null, 50, 60
2, testid2, null, 55, 67
3, testid2, null, 67, 78
4, testid2, null, 78, 89
加入 testid1 应该返回 1 行
加入 testid2 应该返回 3 行
如果 Fields 表中的labid 不为空且testid 不为空,那么我需要使用LabTest 表中的upperlimit 和lowerlimit,其中Fields.testid=LabTest.testid 和Fields.labid=LabTest.labid
如果我使用左连接(因为我还需要获取没有 testid 的字段):
select * from Fields left join LabTest on Fields.testid=LabTest.testid
无论labid 是否为空,我都会取回所有字段(使用上述示例数据的 5 行),但是
我想要得到的只是带有 LabTest.labid 的一行,而不是 null 如果这不存在,那么只有那时我才想得到 LabTest.labid = null 的行
【问题讨论】:
-
请标记正确的 RDBMS,并且只标记正确的 RDBMS。 MySQL 和 SQL Server 是完全不同的产品。
-
使用
inner join并将两个条件都放在那里:Fields.testid=LabTest.testid and Fields.labid=LabTest.labid -
@Lamak 我刚刚编辑了我的问题,为什么我使用
left join
标签: sql-server join sql-server-2012