2015-03-02 3 views
0

Может ли кто-нибудь помочь мне написать один запрос, соединяющий эти два запроса. Я использую IBM DB2.Как объединить два SQL-запроса, в которых запросы объединяются соединением

(SELECT 
    TABLE1.COLS,TBLE2.COLS,TABLE3.COLS 
FROM 
    TABLE1,TABLE2,TABLE3,TABLE_PROB 
WHERE 
    TABLE_PROB.COL=TABLE1.COL,OTHER_CLAUSE) 
UNION  
(SELECT 
    TABLE1.COLS,TBLE2.COLS,TABLE3.COLS 
FROM 
    TABLE1,TABLE2,TABLE3,TABLE_PROB1 
WHERE TABLE_PROB1.COL=TABLE1.COL,OTHER_CLAUSE) 

Эти два запроса до и после union одинаковы за исключением того, что вместо «TABLE_PROB» она меняется на «TABLE_PROB1». Столбцы не должны выбираться из обеих таблиц, они используются только для фильтрации в предложении where.

Может ли кто-нибудь сказать мне, как объединить оба в один запрос.

Этот запрос может быть рассмотрен для следующего сценария. Существует несколько таблиц сведений о сотрудниках, в которых содержатся сведения о всех сотрудниках. «TABLE_PROB» содержит список контрактников, а «TABLE_PROB1» содержит список постоянных сотрудников. Мне нужно получить информацию о контракте, а не о контрактах, основанных на нескольких критериях.

Поскольку запрос имеет большое предложение Whereclause и select, запускающее два запроса с помощью объединения, увеличивает стоимость запроса. Поэтому мне нужно объединить его, сделав один запрос. Спасибо за помощь заранее.

+1

В чем-то не так с запросом, который вы опубликовали? – mustaccio

+0

@mustaccio Да .. Так как выбор запросов и используемое там предложение являются настолько большими, если я выполняю почти такой же запрос 2 раза, используя Union, он увеличивает стоимость. Поскольку это изменение очень мало для обоих запросов, мне нужно объединить их как один запрос. Пожалуйста, не проголосуйте за ненужные причины. Благодарю. –

+0

@mustaccio Да .. Так как выбранные запросы и используемые там условия так велики, если я выполняю почти такой же запрос 2 раза, используя Union, это увеличивает стоимость. Поскольку это изменение очень мало для обоих запросов, мне нужно объединить их как один запрос. Пожалуйста, не проголосуйте за ненужные причины. Благодарю. - –

ответ

3

Вы не можете избежать UNION, потому что вам все еще нужно иметь доступ как к TABLE_PROB, так и к TABLE_PROB1. В зависимости от вашей версии DB2, платформы и конфигурации системы это может выполнить немного лучше:

SELECT 
    TABLE1.COLS,TBLE2.COLS,TABLE3.COLS 
FROM 
    TABLE1,TABLE2,TABLE3 
WHERE 
    OTHER_CLAUSE 
    AND 
    EXISTS (
    SELECT 1 
    FROM TABLE_PROB 
    WHERE COL=TABLE1.COL 
    UNION 
    SELECT 1 
    FROM TABLE_PROB1 
    WHERE COL=TABLE1.COL 
) 

В зависимости от содержания TABLE_PROB.COL и TABLE_PROB1.COL UNION ALL вместо UNION может также оказаться полезным.

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