SQL如何过滤另一个表中具有两个范围的表

时间:2013-06-18 16:56:10

标签: sql range inner-join

我有一张Bills表,每张Bill可以有20个子注册表。

示例(每张账单前5名,可能高达60,000张账单)

(表一)

Bill |   SubRow   |
-----+------------+
1000 |     1      |
1000 |     2      |
1000 |     3      |  
1000 |     4      |
1000 |     5      | 
1001 |     1      |  
1001 |     2      | 
1001 |     3      |  
1001 |     4      |  
1001 |     5      |  

在另一张表中,我有条例编号和一系列子画面

实施例: (表二)

Bill | InitialRange | Final Range|
-----+--------------+------------+
1000 |     1        |      2     |
1000 |     4        |      5     |
1001 |     3        |      5     |

在查询中,我想实现以下目标:

从表1中显示所有不在表2中的范围之间的记录。

这意味着我应该得到以下内容:

Bill |    SubRow  |
-----+------------+
1000 |     3      |
1001 |     1      |
1001 |     2      |  

到目前为止我所拥有的:

Select  Bill,SubRow 
 from TABLE ONE     
    LEFT  join TABLE TWO ON  TABLEONE.Bill= TABLETWO.bill
    where  Subrow < InitialRange and Subrow > FinalRange

但是TABLETWO第二行中的第二个条件会覆盖1000法案的第一个条件。

关于如何实现这一目标的任何想法?

注意(我的表格显得格格不入,我会尝试修复它)

图片示例:

http://postimg.org/image/ymc3z2uzx/

1 个答案:

答案 0 :(得分:1)

试试这个:

    SELECT * FROM TABLE_ONE WHERE NOT EXISTS 
(SELECT * FROM TABLE_TWO 
WHERE TABLE_ONE.Bill = TABLE_TWO.Bill 
AND TABLE_ONE.SubRow BETWEEN TABLE_TWO.IinitialRange AND TABLE_TWO.FinalRange)