Объединение двух запросов без использования Union - PullRequest
0 голосов
/ 15 мая 2018

У меня есть два запроса, и я хочу объединить эти два запроса без использования "UNION"

например

запрос 1:

Select
    T1.Field1,T1.Field2,T2.Field3
from
    T1, T2, T3
where T1.XYZ = T2.XYZ AND T1.STATUS = 'S' AND T1.XYZ = T3.XYZ AND T3.ABC = 'Y';

Результат: 10 строк

запрос 2:

Select
    T1.Field1,T1.Field2,T2.Field3
from
    T1, T2, T4
where
    T1.XYZ = T2.XYZ AND T1.STATUS = 'W' AND T1.XYZ = T4.XYZ AND T4.ABC = 'Y';

Результат: 5 строк.

Есть ли способ объединить запрос 1 и запрос 2 в один без использования "UNION" и получить результат как 15 (10 + 5).

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Это может быть записано как:

Select T1.Field1,T1.Field2,T2.Field3 
from T1, T2, T3, T4 
where T1.XYZ = T2.XYZ 
AND T1.STATUS IN('W','S') 
AND (T4.ABC = 'Y' OR T3.ABC = 'Y')
0 голосов
/ 15 мая 2018

Просто измените ваш запрос следующим образом.

select t1.field1, 
       t1.field2, 
       t2.field3 
from 
       t1, 
       t2, 
       t3 
where  t1.xyz = t2.xyz 
AND   (t1.status = 'S' OR t1.status = 'W') 
AND    t3.abc = 'Y'

Редактировать 1:

Зная, что одна таблица отличается в обоих запросах. Следующее должно работать. Я изменил запятую на JOINS.

select t1.field1, 
       t1.field2, 
       t2.field3 
from   t1 t1 
       inner join t2 t2 
               on t1.xyz = t2.xyz         
where  t1.status IN ( 'S', 'W' ) 

Я согласен с @xQbert, что CROSS JOIN с t3 и t4 не требуется. Даже если это увеличивает количество или количество записей, но я не могу думать о какой-либо причине использовать эти таблицы в этом конкретном запросе.

Редактировать 2: После новых обновлений в вопросе следующий запрос должен работать

select t1.field1, 
       t1.field2, 
       t2.field3 
from   t1 t1 
       inner join t2 t2  on t1.xyz = t2.xyz 
       left join t3 t3 on t1.xyz = t3.xyz and t3.abc = 'Y'
       left join  t4 t4 on  t1.xyz = t4.xyz and t4.abc = 'Y'
where  t1.status IN ( 'S', 'W' )
and (t3.xyz is not null or t4.xyz is not null) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...