2

我有这个工作查询

SELECT t1.id as stockid, t1.description as stockdescription, t2.inkoop as price , COUNT(t2.inkoop) as cnt, 
(t2.inkoop *  COUNT(t2.inkoop)) as totalamount
FROM database1.table_products t1 
LEFT JOIN database1.table_stock t2 ON t1.id = t2.stock_id 
WHERE 1 
GROUP BY t2.inkoop
ORDER BY t1.id ASC

1 个数据库,2 个表:t1 是带有 id 的产品“描述”数据库,描述 t2 是库存,其中有很多以什么价格(购买)的产品并由 stock_id 引用

Output:
id  stockdescription   price cnt totalamount
1   Product1           1067  15  16005
1   Product1           1290 103  132870
2   Product2           2750  70  192500
3   Product3           500    0  0

但是现在我有了第二个数据库(database2)和第二个库存表(stock2)(与database1.table_stock的结构完全相同)

如何更改我的查询,以便我还可以添加“cnt2”并将总计更改为我的结果?

Like this:
id  stockdescription   price cnt cnt2 totalcnt totalamount
1   Product1           1067  15   0    15      16005
1   Product1           1290 103   0    103     132870
2   Product2           2750  70   5    75      206250
3   Product3           500    0   4     4      2000 
4

1 回答 1

1

您可以连接多个表,但您将获得两个股票表的完全连接,这意味着在GROUP BY. 您可以通过嵌套查询来避免这种情况,例如:

SELECT sub.*, COUNT(stock2.inkoop) AS cnt2
FROM ( <paste your query here> ) AS sub
LEFT JOIN database2.stock2 AS stock2 ON sub.stockid = stock2.stock_id
GROUP BY sub.stockid
ORDER BY sub.stockid ASC

现在你有两个左连接,每个都有自己的GROUP BY. 所以每个左连接只看到一个左手表因​​子,你不会因为一次连接太多表而导致重复。

于 2012-10-25T20:48:27.633 回答