Текущий архив: 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