2015-12-28 24 views
0

我有兩個表CENTER和RANGE_CENTER。根據表1的CENTER_ID,我需要找到它的對應ID。比較Oracle SQL中的表之間的範圍

例如,如果Centreid爲2000,那麼它應該在表1

我發現很難編寫查詢所有記錄顯示a100.Same方式。

請你指導一下。

DEPT Center_Id 
10 2000 
10 2001 
20 3001 
20 2580 


CENTER_FROM  CENTER_TO ALLOCATION_ID 
1999    2499  a100 
2500    2999  b234 
3000    3499  c199 

感謝

回答

3

可以join表,因此從一個表中的center_id是between從另一個表center_from和center_to。

select c.dept,c.center_id,rc.allocation_id 
from center c 
join range_center rc on c.center_id between rc.center_from and rc.center_to 
+0

嗨,是否有我們不使用加入可以寫任何其他方式。 – MKN

+0

您可以使用帶有硬編碼範圍的'case'表達式。 –

+0

@Mani - 對於有兩個表的查詢不使用JOIN是一個非常奇怪的要求。你需要證明這個限制 – APC

0

如果你不喜歡的連接,那麼你可以使用相關子查詢:

SELECT c.DEPT, c.Center_Id, 
     (SELECT ALLOCATION_ID FROM RANGE_CENTER r 
     WHERE c.Center_Id BETWEEN r.CENTER_FROM AND r.CENTER_TO 
     ) As ALLOCATION_ID 
FROM CENTER c 
+0

這很好,我只需要限制行返回多個值在子查詢 – MKN

+0

kordirko:我從子查詢gettign多行,我只需要顯示那些正在檢索單行 – MKN

+0

你的錯誤意味着,'RANGE_CENTER'包含重疊的範圍。在這種情況下,唯一的方法是加入兩個表。 – krokodilko