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

Откуда:
Сообщений: 12
Вот такой запрос в Northwind. Цель - найти цену, которая есть в каждой категории, но только один раз. Знаю, что как-то извращенно, но вопрос скорее по синтаксису.
Результат выдает как два столбца - как сказать ему, чтобы было вычитание одного множества из другого? (ну в результе NULL должен быть или значение, которое есть только у одной таблицы)
Как обозначить, что эти два подзапроса это одна большая таблица для from?
select * from  
(Select UnitPrice from Products group by UnitPrice, CategoryID having count(*)=1) b
full outer join (select distinct a.UnitPrice from (Select UnitPrice from Products group by UnitPrice, CategoryID having count(*)=1) a) aa on aa.UnitPrice=b.Unitprice


Спасибо
17 фев 13, 17:30    [13938942]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать from из нескольких подзапросов??  [new]
Добрый Э - Эх
Guest
greggy78,

select UnitPrice 
  from Products 
 group by UnitPrice
having count(distinct CategoryID) = (select count(distinct CategoryID) from Products)


???
17 фев 13, 17:54    [13939009]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать from из нескольких подзапросов??  [new]
Добрый Э - Эх
Guest
Упс, забыл проверить на "только один раз". Вот так оно будет правильнее:
Добрый Э - Эх
greggy78,

select UnitPrice 
  from Products 
 group by UnitPrice
having count(distinct CategoryID) = (select count(distinct CategoryID) from Products)
   and count(1) = count(distincrt CategoryID)


???
17 фев 13, 18:02    [13939036]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать from из нескольких подзапросов??  [new]
Добрый Э - Эх
Guest
Исправил опечатку:
select UnitPrice 
  from Products 
 group by UnitPrice
having count(distinct CategoryID) = (select count(distinct CategoryID) from Products)
   and count(1) = count(distinct CategoryID)
17 фев 13, 18:03    [13939039]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать from из нескольких подзапросов??  [new]
greggy78
Member

Откуда:
Сообщений: 12
Мдааа.... спасибо.
Ну ок, вопрос в силе)
17 фев 13, 18:04    [13939048]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать from из нескольких подзапросов??  [new]
Добрый Э - Эх
Guest
greggy78,

когда два запроса хотят объявить одной таблицей, то используют SET-операторы: UNION [ALL] | INTERSECT | EXCEPT
17 фев 13, 18:08    [13939061]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать from из нескольких подзапросов??  [new]
greggy78
Member

Откуда:
Сообщений: 12
Добрый Э - Эх,

Блин, я думал, что Exept - это отдельный оператор вроде? В MSSQL в любом случае не получалось его применить.
Но по логике, таким ужасом с full outer join можно получить эти цены?
17 фев 13, 18:11    [13939070]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать from из нескольких подзапросов??  [new]
Добрый Э - Эх
Guest
greggy78,

непонятно желание использовать именно FULL JOIN. По логике - там вполне себе обычного INNER должно быть достаточно.
17 фев 13, 18:13    [13939074]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать from из нескольких подзапросов??  [new]
greggy78
Member

Откуда:
Сообщений: 12
Добрый Э - Эх,

Как бы реализация такая. Есть 2 таблицы, в 1ой таблице A есть та "цена", которая уникальна и повторяется, во 2й таблице нет никаких повторяющихся после distinct. A-B должно оставить те самые повторяющиеся цены.
У меня ощущение, что я как-то неправильно думаю.
17 фев 13, 18:18    [13939084]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать from из нескольких подзапросов??  [new]
Добрый Э - Эх
Guest
greggy78,

ещё раз - "вычитание одного множества из другого" - это операция EXCEPT. Как вариант - делать через NOT EXISTS.
Если делать через FULL JOIN, то нужно брать те записи, у которых после FULL JOIN-а останется NULL с одной из сторон.

З.Ы.
Первый твой пост и последний - немного разные задачи формулируют. Ты уж определись, что тебе нужно - уникальную цену с вхождением в каждую из категорий, или повторяющиеся цены...
17 фев 13, 18:24    [13939103]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить