Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.05.18;
Скачать: CL | DM;

Вниз

Объединение данных из двух SQL-запросов   Найти похожие ветки 

 
GlFox ©   (2007-12-07 17:38) [0]

Есть две таблицы (на самом деле их больше, но интересуют только две):
1) pics - [group_id, pic_type, pic_id]
2) pic_count - [group_id, pic_type, pic_count]
Допустимо предположение, что все поля в обеих таблицах целочисленные.
Запрос для получения количества картинок по типам из таблицы pics:
select Group_ID, Pic_Type, count(Pic_ID) from Pics group by Group_ID, Pic_Type
В идеале данные, полученные из приведенного запроса должны соответсвовать записям в таблице pic_count. Но только в идеале...
В таблицах нет Foreign Key (не спрашивайте почему, не знаю) и не будет.
Как одним запросом получить только записи не совпадающие из двух наборов:
- select Group_ID, Pic_Type, count(Pic_ID) from Pics group by Group_ID, Pic_Type
- select * from Pic_Count


 
Stas ©   (2007-12-07 17:43) [1]

select * from
(select Group_ID, Pic_Type, count(Pic_ID) from Pics group by Group_ID, Pic_Type) as Q FULL OUTER JOIN
(select * from Pic_Count) as q1 ON q1.id=q.id
WHERE q1.id is null or q.id is null


 
GlFox ©   (2007-12-07 17:50) [2]

> [1] Stas ©   (07.12.07 17:43)
Прошу прощения за непонятливость, но откуда берутся поля типа q1.id и q.id?


 
GlFox ©   (2007-12-07 17:58) [3]

Ага. Забыл еще сказать что СУБД MySQL 5.0


 
GlFox ©   (2007-12-10 11:13) [4]

В итоге получился запрос такого вида, если кому интересно (а даже, если не интересно, все равно такой):

select P.Group_ID, P.Pic_Type, count(P.Pic_ID) as Pic_Cnt0 from Pics P
group by P.Group_ID, P.Pic_Type
having Pic_Cnt0<>(select PC.Pic_Count from Pic_Count PC where PC.Group_ID=P.Group_ID and PC.Pic_Type=P.Pic_Type)
union
select PC.Group_ID, PC.Pic_Type, PC.Pic_Count from Pic_Count PC
where not exists(select P.Group_ID from Pics P where P.Group_ID=PC.Group_ID and P.Pic_Type=PC.Pic_Type)

Спасибо за внимание и сочувствие ;) Если есть предложения по оптимизации, будет интересно их увидеть...


 
Sergey13 ©   (2007-12-10 11:23) [5]

> [4] GlFox ©   (10.12.07 11:13)

Хоть какой флажок добавь для обозначения из какой части запроса ответ пришел. И наверное тут уместнее будет union all.


 
GlFox ©   (2007-12-10 11:43) [6]

> [5] Sergey13 ©   (10.12.07 11:23)
В данном случае не особо принципиально из какой части запроса пришел ответ. А приходить он может из любой или даже из двух сразу...
Хотя в флажок, конечно, не помешает никоим образом, а даже и поможет при разборе результатов.
Насчет union all не знаю... А в чем отличие?


 
Sergey13 ©   (2007-12-10 11:59) [7]

> [6] GlFox ©   (10.12.07 11:43)
> А в чем отличие?

Без ALL убирает дубликаты, для чего упорядочивает результат. С ALL просто выдает все что есть.



Страницы: 1 вся ветка

Текущий архив: 2008.05.18;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.022 c
2-1203231941
DRAF
2008-02-17 10:05
2008.05.18
Полоса пкрутки


15-1207403489
TIF
2008-04-05 17:51
2008.05.18
Подскажите, а то фантазия даёт сбой :-(


2-1208344255
lewka-serdceed
2008-04-16 15:10
2008.05.18
Ошибка "Invalid variant operation"


15-1207566773
samalex
2008-04-07 15:12
2008.05.18
Подключен-ли сетевой диск?


3-1197018869
ZeroDivide
2007-12-07 12:14
2008.05.18
Форматирование XMLType в текст