Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
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] Ответить | Цитировать Сообщить модератору |
Добрый Э - Эх
Guest |
greggy78,select UnitPrice from Products group by UnitPrice having count(distinct CategoryID) = (select count(distinct CategoryID) from Products) ??? |
17 фев 13, 17:54 [13939009] Ответить | Цитировать Сообщить модератору |
Добрый Э - Эх
Guest |
Упс, забыл проверить на "только один раз". Вот так оно будет правильнее:
|
||
17 фев 13, 18:02 [13939036] Ответить | Цитировать Сообщить модератору |
Добрый Э - Эх
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] Ответить | Цитировать Сообщить модератору |
greggy78 Member Откуда: Сообщений: 12 |
Мдааа.... спасибо. Ну ок, вопрос в силе) |
17 фев 13, 18:04 [13939048] Ответить | Цитировать Сообщить модератору |
Добрый Э - Эх
Guest |
greggy78, когда два запроса хотят объявить одной таблицей, то используют SET-операторы: UNION [ALL] | INTERSECT | EXCEPT |
17 фев 13, 18:08 [13939061] Ответить | Цитировать Сообщить модератору |
greggy78 Member Откуда: Сообщений: 12 |
Добрый Э - Эх, Блин, я думал, что Exept - это отдельный оператор вроде? В MSSQL в любом случае не получалось его применить. Но по логике, таким ужасом с full outer join можно получить эти цены? |
17 фев 13, 18:11 [13939070] Ответить | Цитировать Сообщить модератору |
Добрый Э - Эх
Guest |
greggy78, непонятно желание использовать именно FULL JOIN. По логике - там вполне себе обычного INNER должно быть достаточно. |
17 фев 13, 18:13 [13939074] Ответить | Цитировать Сообщить модератору |
greggy78 Member Откуда: Сообщений: 12 |
Добрый Э - Эх, Как бы реализация такая. Есть 2 таблицы, в 1ой таблице A есть та "цена", которая уникальна и повторяется, во 2й таблице нет никаких повторяющихся после distinct. A-B должно оставить те самые повторяющиеся цены. У меня ощущение, что я как-то неправильно думаю. |
17 фев 13, 18:18 [13939084] Ответить | Цитировать Сообщить модератору |
Добрый Э - Эх
Guest |
greggy78, ещё раз - "вычитание одного множества из другого" - это операция EXCEPT. Как вариант - делать через NOT EXISTS. Если делать через FULL JOIN, то нужно брать те записи, у которых после FULL JOIN-а останется NULL с одной из сторон. З.Ы. Первый твой пост и последний - немного разные задачи формулируют. Ты уж определись, что тебе нужно - уникальную цену с вхождением в каждую из категорий, или повторяющиеся цены... |
17 фев 13, 18:24 [13939103] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |