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

Откуда:
Сообщений: 12
Добрый день.
Имеется такая таблица:

create table Names
( varchar(50) not null,
varchar(50) not null,
[key] varchar(50) not null
)


insert Names([name], [value],[key]) values('a', 'aa', '1')
insert Names([name], [value],[key]) values('b', 'bb', '1')
insert Names([name], [value],[key]) values('c', 'cc', '2')
insert Names([name], [value],[key]) values('d', 'dd', '2')
insert Names([name], [value],[key]) values('e', 'ee', '3')
insert Names([name], [value],[key]) values('f', 'ff', '3')

Требуется выбрать данные с [key]='2' если они есть, а если нет то все остальные. [name]+[value] - уникально.
Должно быть какое то самосоединение, да что то не придумывается...
7 ноя 11, 16:51    [11559401]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с запросом.  [new]
tt1
Guest
select *
from names
where [key] = 2
union all
select *
from names
where not exists
(select *
from names
where [key] = 2)
7 ноя 11, 17:00    [11559465]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с запросом.  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
SELECT *
FROM Names
WHERE [key]=ALL(SELECT [key] FROM Names WHERE [key]=2);
7 ноя 11, 17:08    [11559545]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с запросом.  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
select top 1 with ties *
from Names
order by case when [key] = '2' then 0 else 1 end
ЗЫ про ALL не знал, прикольно
7 ноя 11, 17:14    [11559605]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с запросом.  [new]
Воротник
Member

Откуда:
Сообщений: 12
Всем спасибо. Вариант с ALL самый изящный.
7 ноя 11, 17:40    [11559787]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с запросом.  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Воротник
Всем спасибо. Вариант с ALL самый изящный.
Но необязательно самый эффективный - смотреть надо.
7 ноя 11, 17:46    [11559829]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с запросом.  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
iap
Воротник
Всем спасибо. Вариант с ALL самый изящный.
Но необязательно самый эффективный - смотреть надо.
К тому же это работает, если сравниваете с одним значением.
Другие решения универсальнее в этом отношении
7 ноя 11, 17:53    [11559883]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с запросом.  [new]
hpv
Member

Откуда:
Сообщений: 153
iap,

http://msdn.microsoft.com/en-us/library/ms173545.aspx

ALL
Used with a comparison operator and a subquery. Returns TRUE for <predicate> when all values retrieved for the subquery satisfy the comparison operation, or FALSE when not all values satisfy the comparison or when the subquery returns no rows to the outer statement.


Почему при отсутсвтии записей (со значением 2) у предиката TRUE?
7 ноя 11, 18:23    [11560012]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с запросом.  [new]
Воротник
Member

Откуда:
Сообщений: 12
iap,

Ну в моем случае как раз с одним значением и было сравнение. Как оказалось можно и через условие [key]='2' or '2' not in (select [key] from Names) выбрать.
7 ноя 11, 19:17    [11560230]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с запросом.  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
hpv
iap,

http://msdn.microsoft.com/en-us/library/ms173545.aspx

ALL
Used with a comparison operator and a subquery. Returns TRUE for <predicate> when all values retrieved for the subquery satisfy the comparison operation, or FALSE when not all values satisfy the comparison or when the subquery returns no rows to the outer statement.


Почему при отсутсвтии записей (со значением 2) у предиката TRUE?
Я об этом знаю вот с этого момента: ALL - глюк или фича?
7 ноя 11, 20:11    [11560423]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить