Главная страница
    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.052 c
15-1207544272
Игорь Шевченко
2008-04-07 08:57
2008.05.18
McSimm, с днем рождения!


2-1208326305
Mishenka
2008-04-16 10:11
2008.05.18
Как в TEdit определить в какой позиции находится курсор?


3-1197113218
prisoner849
2007-12-08 14:26
2008.05.18
Запрос в MS Access


2-1208508202
umbra
2008-04-18 12:43
2008.05.18
как запихнуть данные в базу? :)


3-1192531929
NNH
2007-10-16 14:52
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский