Главная страница
    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.46 MB
Время: 0.104 c
6-1185251532
Inearthed
2007-07-24 08:32
2008.05.18
Продолжение пересылки файлов на FTP после обрыва связи


15-1207070549
Andy BitOff
2008-04-01 21:22
2008.05.18
Интерактивный отладчик для PHP


15-1207211804
БарЛог
2008-04-03 12:36
2008.05.18
Радиоканал на 2КМ


2-1208425578
VictoR407
2008-04-17 13:46
2008.05.18
Как удалить полосы прокрутки в компоненте treeview?


8-1180007525
Огнеяр
2007-05-24 15:52
2008.05.18
СОС!!! (Быстрый вывод изображения. OpenGL?)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский