Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Простой вопрос по запросу  [new]
Esentuki
Member

Откуда:
Сообщений: 88
У меня простой вопрос есть 2 таблицы вида:

t1:

|-----|------|-----|
| a1 | a2 | a3 |
|-----|------|-----|
| 1 | Иван | |
|-----|------|-----|
| 2 | Петя | |
|-----|------|-----|
| 3 | Саша | |
|-----|------|-----|


t2

|-----|------|------------|
| a1 | a2 | a3 |
|-----|------|------------|
| 1 | Иван | Иванов |
|-----|------|------------|
| 2 | Петя | |
|-----|------|------------|


ЗАПРОС


SELECT * FROM t1
UNION ALL
SELECT * FROM t2


Выдает


|-----|------|------------|
| a1 | a2 | a3 |
|-----|------|------------|
| 1 | Иван | |
|-----|------|------------|
| 2 | Петя | |
|-----|------|------------|
| 3 | Саша | |
|-----|------|------------|
| 1 | Иван | Иванов |
|-----|------|------------|
| 2 | Петя | |
|-----|------|------------|

А как составить запрос что бы результат был такой:


|-----|------|------------|
| a1 | a2 | a3 |
|-----|------|------------|
| 3 | Саша | |
|-----|------|------------|
| 1 | Иван | Иванов |
|-----|------|------------|
| 2 | Петя | |
|-----|------|------------|


те необходимо исключить из таблицы t1 те строки у которых в ячейке a3 пусто, а таблице t2 в ячейке а3 есть данные, при этом если в ячейке а3 пусто а в табл t2 нет данных то эту строку надо вывести


заранее спасибо!
22 дек 14, 07:09    [17031801]     Ответить | Цитировать Сообщить модератору
 Re: Простой вопрос по запросу  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
SELECT * FROM t1 where not exists ( select * from t2 where t1.id = t2.id )
UNION ALL 
SELECT * FROM t2 where exists ( select * from t1 where t1.id = t2.id )
22 дек 14, 08:18    [17031851]     Ответить | Цитировать Сообщить модератору
 Re: Простой вопрос по запросу  [new]
Esentuki
Member

Откуда:
Сообщений: 88
У меня вопрос в следующием, сами таблицы T1 и T2 это не отдельные таблицы а результаты запроса.
Каким образом сформировать запрос при таких условиях???
22 дек 14, 09:34    [17032173]     Ответить | Цитировать Сообщить модератору
 Re: Простой вопрос по запросу  [new]
Esentuki
Member

Откуда:
Сообщений: 88
те не писать же так:
SELECT * FROM ( [color=red]SELECT * FROM.....[/color]) where not exists ( select * from ( [color=red]SELECT * FROM.....[/color]) where ( [color=red]SELECT * FROM.....[/color]).id = ( [color=red]SELECT * FROM.....[/color]).id )
UNION ALL 
SELECT * FROM ( [color=red]SELECT * FROM.....[/color]) where exists ( select * from ( [color=red]SELECT * FROM.....[/color]) where ( [color=red]SELECT * FROM.....[/color]).id = ( [color=red]SELECT * FROM.....[/color]).id )
22 дек 14, 09:37    [17032184]     Ответить | Цитировать Сообщить модератору
 Re: Простой вопрос по запросу  [new]
baracs
Member

Откуда: Москва
Сообщений: 7204
Esentuki,

Если версия сервера 2005 или старше, можно использовать CTE.
Можно положить промежуточные результаты во временные таблицы или табличные переменные...
22 дек 14, 09:46    [17032237]     Ответить | Цитировать Сообщить модератору
 Re: Простой вопрос по запросу  [new]
ikv_2006
Member

Откуда:
Сообщений: 47
Esentuki, можно через группировку:
select a1, max(a2), max(a3)
from (
  select 1 a1, 'Иван' a2, '' a3  union all
  select 2 a1, 'Петя' a2, '' a3  union all
  select 3 a1, 'Саша' a2, '' a3  union all
  select 1 a1, 'Иван' a2, 'Иванов' a3  union all
  select 2 a1, 'Петя' a2, '' a3  
) s
group by a1
22 дек 14, 19:00    [17036327]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить