2014-06-13 31 views
0

我不確定這是否可以使用單個JOIN完成,但我基本上有兩個ID列通用的表。爲了簡單起見,我會說表A只包含一個ID,而表B包含一個ID和代碼。表A和表B之間有1:M的關係,但表B中的ID也可能不包含在表B中。我希望有一個查詢返回特定代碼範圍內表B中存在的每個ID,或根本不存在於表B中。這可以通過單個SQL加入完成嗎?

我使用LEFT JOIN嘗試用類似:

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

但是,這仍然給我的代碼範圍之外存在於表B的ID。

+4

你使用的是mysql還是sql server?它們不是同一件事。 –

+0

給我們一些樣本數據和結果。 – wumpz

+0

很確定'在'之間'不能這樣工作。 「0到123之間」有道理。添加'和b.code爲空'來獲取那些不存在於'b'中的。 – paqogomez

回答

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 
0

什麼

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