2015-02-23 6 views
0

je les tableaux (simplifiées) suivantes:
Union SQL avec conditionnelle Champ

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


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

Comment puis-je les UNION (ou autre méthode), mais remplir le No0 approprié sur la 2e table basée sur No1 être entre start0 et end0 afin qu'il retourne:

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

Pourquoi woudn't un travail de simple déclaration syndicale? 'Select * from table1 UNION ALL Sélectionnez * from table2' – xQbert

+0

Vous demandez essentiellement un JOIN sur le select dans le tableau 2, cela n'a rien à voir avec UNION – Louis

Répondre

1

Sur la moitié inférieure de l'Union, se joindre à nouveau à TableA où No1 est entre START0 et End0.

Voici un exemple:

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

Vous devez être rapide sur le trigger et vous avez un tirage plus rapide. +1 –

+0

@ Love2Learn, haha ​​merci! – animateme

+0

Merci! Je savais que ce serait assez simple mais vous ne croiriez pas combien de temps j'ai passé à faire tourner mes roues. – Boone