2010-04-05 3 views
9

Есть ли способ избежать использования таблицы tmp?Как присоединиться к набору результатов запроса с существующей таблицей?

Я использую запрос с агрегатной функцией (сумма), чтобы сформировать сумму каждого продукта: результат выглядит следующим образом:

product_name | sum(qty) 
product_1 | 100 
product_2 | 200 
product_5 | 300 

теперь я хочу, чтобы присоединиться к выше результату другой таблицы называется продукция , , так что я буду иметь резюме, как это:

product_name | sum(qty) 
product_1 | 100 
product_2 | 200 
product_3 | 0 
product_4 | 0 
product_5 | 300 

я знаю один способ сделать это свалка первый результат запроса к временной таблице, то присоединиться к нему с таблицей продукции. Есть ли способ лучше?

+3

Не могли бы вы привести несколько примеров, поэтому мы можем помочь? –

+0

Я использую запрос с агрегированной функцией (суммой) для генерации суммы каждого продукта: Результат выглядит следующим образом: product_name | сумма (штук) product_1 | 100 product_2 | 200 product_5 | 300 Теперь я хочу присоединиться к приведенному выше результату в другой таблице, называемой продуктом. так что у меня будет сводка вроде этого: product_name | сумма (штук) product_1 | 100 product_2 | 200 product_3 | 0 product_4 | 0 продукт_5 | 300 Я знаю, что 1 способ сделать это - сброс 1-го результата запроса в таблицу temp, а затем присоединить его к таблице продуктов. Есть ли способ лучше? – Yang

ответ

24
SELECT Product_Name, Total FROM ProductTable x 
LEFT OUTER JOIN (SELECT SUM(qty) as Total, ProductID FROM InventoryTable 
    GROUP BY ProductID) y 
ON x.ProductID = y.ProductID 
+0

Я собираюсь предположить, что вы хотели иметь «GROUP BY ProductId» в подзапросе. – Powerlord

+0

@OMG: Исправлено, спасибо. – egrunin

1

Вы можете сделать несколько соединений в одном запросе select. Решает ли ваша проблема? Трудно сказать, о чем вы просите.

2

Вы можете сделать это, как этот

select table1.productname, virtualtable.qty 
from table1 
inner join (
    select productid, qty 
    from table2 
    group by productid 
) as virtualtable on virtualtable.productid = table1.productid 
Смежные вопросы