2015-02-23 69 views
0

我有以下的(简化)表:
SQL联盟与条件字段

No0 | No1 | start0 | end0 
10000 |   |    | 
19999 |   |  10000 | 19999 
20000 |   |    | 
29999 |   |  20000 | 29999 


No0 | No1 | start0 | end0 
     | 11000 |    |  
     | 15950 |    | 15950 
     | 16000 |    | 

我怎样才能UNION他们(或其他方式),但填2号表中相应的No0基于No1start0end0之间,使其返回:

No0 | No1 | start0 | end0 
10000 |   |    | 
19999 |   |  10000 | 19999 
20000 |   |    | 
29999 |   |  20000 | 29999 
19999 | 11000 |    |  
19999 | 15950 |    |  
19999 | 16000 |    | 
+0

为什么woudn't简单union语句的工作? '从table1中选择* UNION ALL从table2中选择* – xQbert 2015-02-23 18:42:43

+0

您基本上要求在表2中选择一个JOIN,它与UNION无关 – Louis 2015-02-23 18:48:36

回答

1

在工会的下半部分,携手回表A,其中1号是START0和END0之间。

下面是一个例子:

select  ta.No0, 
      ta.No1, 
      ta.Start0, 
      ta.End0 
from  TableA as ta 
union all 
select  ta.No0, 
      tb.No1, 
      NULL as Start0, 
      NULL as End0 
from  TableB as tb 
inner join TableA as ta on tb.No1 between ta.Start0 and ta.End0; 

SQLFiddle

+0

触发得快,并且您的绘制速度更快。 +1 – 2015-02-23 18:50:08

+0

@ Love2Learn,哈哈谢谢! – animateme 2015-02-23 18:51:52

+0

谢谢!我知道这很简单,但你不会相信我花了多少时间来旋转我的轮子。 – Boone 2015-02-23 19:30:58