Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2008.05.18;
Скачать: [xml.tar.bz2];

Вниз

Объединение данных из двух 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.04 c
2-1208709944
yahoo
2008-04-20 20:45
2008.05.18
Написание программ в Delphi на WinApi


3-1196882052
jiny
2007-12-05 22:14
2008.05.18
Как вставить результат процедуры в селект Advantage Database


2-1208719740
worldmen
2008-04-20 23:29
2008.05.18
Загрузить с ini файла в переменную имена всех ключей


11-1189253517
grim
2007-09-08 16:11
2008.05.18
Скины в кол?!


9-1169849373
Pa5ha
2007-01-27 01:09
2008.05.18
Как быстро рисовать на канве?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский