Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сложный запрос 
:(
    Опции темы
uranpro
Дата 2.7.2008, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 571
Регистрация: 7.5.2008
Где: Moscow city

Репутация: нет
Всего: 1



есть таблица v_DublePrice с полями dpMID, dpPID, dpPriceID, dpPrice

MID- модель, PID- размерная линейка PriceID- ссылка на прайс0лист, по которому берется Price

есть такое правило(1): для всех PID по 1 MID и по 1 PriceID цены должны быть равны.

задача: вывести все MID со всеми PID, с ценами(Price) по PriceID, где хотябы на одном поле не соблюдается правило (1).

надеюсь, задача понятна.

можно сделать примерно так, но я думаю есть решение поумнее.
Код

select * from v_dubleprice as 1
where
count((select * from v_dubleprice as 2 where (2.dpmid=1.dpmid) and (2.dppriceid=1.dppriceid) and (2.dpprice<>1.dpprice)))>0


помогите плс,


--------------------
I want a perfect soul
PM MAIL ICQ   Вверх
uranpro
Дата 2.7.2008, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 571
Регистрация: 7.5.2008
Где: Moscow city

Репутация: нет
Всего: 1



Код

SELECT     dpPrices, dpPrice, dpModelID, dpSize, dpMID, dpPID
FROM         v_DublePrices AS a1
WHERE     ((SELECT     COUNT(*) AS Expr1
                         FROM         v_DublePrices AS a2
                         WHERE     (dpMID = a1.dpMID) AND (dpPrices = a1.dpPrices) AND (dpPrice <> a1.dpPrice)) > 0)
ORDER BY dpMID

кому интересно


--------------------
I want a perfect soul
PM MAIL ICQ   Вверх
Deniz
Дата 3.7.2008, 05:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 1
Всего: 44



Цитата(uranpro @  2.7.2008,  21:14 Найти цитируемый пост)
кому интересно 
т.е. про HAVING не слышал.
Код
select dpPrices, dpMID, dpPID, count(distinct dpPrice)
from v_DublePrices
group by dpPrices, dpMID, dpPID
having count(distinct dpPrice) > 1



--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
uranpro
Дата 3.7.2008, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 571
Регистрация: 7.5.2008
Где: Moscow city

Репутация: нет
Всего: 1



оО!! чет я не догадался, сложный день вчера был^^

спасибо

Добавлено через 1 минуту и 4 секунды
мне нужно в подписи написать "не ищу легких решений" гы)) smile 


--------------------
I want a perfect soul
PM MAIL ICQ   Вверх
uranpro
Дата 3.7.2008, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 571
Регистрация: 7.5.2008
Где: Moscow city

Репутация: нет
Всего: 1



Deniz, этот запрос не выдает никаких данных( и открывается в 2 раза медленнее чем  мой


--------------------
I want a perfect soul
PM MAIL ICQ   Вверх
Deniz
Дата 3.7.2008, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 1
Всего: 44



Цитата(uranpro @  3.7.2008,  13:35 Найти цитируемый пост)
Deniz, этот запрос не выдает никаких данных( и открывается в 2 раза медленнее чем  мой 
так у нас и запросы разные.
У тебя не участвует поле dpPID, убери его из моего запроса.
Возможно много времени занимает count(distinct dpPrice).
Так же нужно проверить наличие индексов по полям dpPrices, dpMID, dpPID.
Можно оставить и твой запрос, но тогда его лучше чуток переделать:
Код
SELECT     dpPrices, dpPrice, dpModelID, dpSize, dpMID, dpPID
FROM         v_DublePrices AS a1
WHERE
  exists(SELECT 1 FROM v_DublePrices AS a2
             WHERE (a2.dpMID = a1.dpMID) AND (a2.dpPrices = a1.dpPrices) AND (a2.dpPrice <> a1.dpPrice)
  )
ORDER BY dpMID


Это сообщение отредактировал(а) Deniz - 3.7.2008, 11:27


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
uranpro
Дата 3.7.2008, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 571
Регистрация: 7.5.2008
Где: Moscow city

Репутация: нет
Всего: 1



Deniz, а разница межу ними какая? интересно.. быстрее работать будет ? 
тут очень проблемный сервер, постоянно загружен на полную. очень много информации.


--------------------
I want a perfect soul
PM MAIL ICQ   Вверх
Deniz
Дата 3.7.2008, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 1
Всего: 44



Цитата(uranpro @  3.7.2008,  15:20 Найти цитируемый пост)
а разница межу ними какая?
между кем и кем?
Могу сказать точно, что exists лучше чем count(*) > 0, потому как exists заканчивает поиск после первой найденной записи, а count(*) ищет все записи.
По идее запросы твой(с count(*) >0) и мой(с having) должны выполняться примерно одинаково по времени.


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
uranpro
Дата 3.7.2008, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 571
Регистрация: 7.5.2008
Где: Moscow city

Репутация: нет
Всего: 1



на нашем сервере это не так ^^

спасибо!


--------------------
I want a perfect soul
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.0471 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.