2015-02-23 3 views
0

У меня есть следующие (упрощенно) таблицы:
SQL союз с Условным полем

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


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

Как я могу UNION их (или другой метод), но заполнить в соответствующем No0 на 2-й таблице на основе No1 существ между start0 и end0 так, что она возвращает:

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

Почему woudn't простое объединение заявление работа? 'Select * from table1 UNION ALL Select * from table2' – xQbert

+0

В основном вы запрашиваете JOIN для выбора в таблице 2, это не имеет никакого отношения к UNION. – Louis

ответ

1

на нижней половине союза, присоединиться обратно к TableA где No1 между 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 –

+0

@ Love2Learn, ха-ха спасибо! – animateme

+0

Спасибо! Я знал, что это будет довольно просто, но вы не поверили бы, сколько времени я потратил на вращение колес. – Boone

Смежные вопросы