这可以通过单个SQL Join完成吗?

时间:2014-06-13 19:49:04

标签: sql sql-server join

我不确定是否可以使用单个JOIN完成此操作,但我基本上有两个共享ID列的表。为简单起见,我会说表A只包含一个ID,而表B包含一个ID和代码。表A和表B之间存在1:M关系,但是表A中的ID根本不包含在表B中也是可能的。我希望有一个查询返回特定代码范围内表B中存在的每个ID,或者表B中根本不存在。

我尝试使用LEFT JOIN,例如:

SELECT A.id FROM A LEFT JOIN B ON A.id = B.id AND b.code BETWEEN '000' AND '123'

但是,这仍然为我提供了代码范围之外的表B中存在的ID。

2 个答案:

答案 0 :(得分:3)

使用左连接,并过滤结果以包含范围内的代码,以及表B中没有匹配记录的行:

select
  A.id
from
  A
  left join B on B.id = A.id
where
  B.code between '000' and '123' or B.id is null

答案 1 :(得分:0)

怎么样?
SELECT id FROM A LEFT JOIN B ON A.id = B.id 
WHERE b.code IS NULL OR b.code BETWEEN ' ' AND '123'