2009-04-20 2 views
1

У меня есть запрос, который работает как:избежать несколькимх выбирает при группировке

select table_one.x, sum(table_one.y) 
(select foo from table_two where table_one.x = table_two.x) as item_description 
from table_one 
inner join table_two 
on table_one.x = table_two.x 
-- where table_2 row has various attributes 
group by table_one.x 

Группировка означает, что я нужен суб-выбор для доступа к Foo из таблицы два. Теперь, если я хочу выбрать второй столбец из таблицы 2, есть ли способ получить к нему доступ без второго подвыборки?

База данных - это DB2.

EDIT: join is many to one, т. Е. Думать о table_one как о заказах и table_b как содержащем информацию для элемента.

ответ

2

У таблицы table_two есть несколько строк для каждого table_one.x или это одно-одно соединение ... , если это один-два-один, тогда это не делает то, что вы хотите ... так как ваш суб- Селектор делается на тех же условиях, что ваш присоединиться

SELECT 
    table_one.x, table_two.foo, sum(table_one.y) 
FROM table_one 
    INNER JOIN table_two 
     ON table_one.x = table_two.x 
GROUP BY 
    table_one.x, table_two.foo 
0
SELECT * 
FROM (
     SELECT x, SUM(y) 
     FROM table_one 
     GROUP BY 
       x 
     ) AS t1 
INNER JOIN 
     table_two t2 
ON  t2.x = t1.x 
-- where table_2 row has various attributes 
+0

производительность не может быть хорошо для этого, как она материализуется t1 первого до прихода t2 – kishore

+0

я не знаю DB2 в глубину, но Oracle и MS SQL не реализуют весь вид, если есть указатель на table_one (x). – Quassnoi

Смежные вопросы