表1 :
Itemid saleid
---------------
53355 23224
33544 33246
53355 33353
43324 33353
表2 :
Saleid Rebate
--------------
23224 3000
33246 5000
33353 5555
33353 4444
这是一张简化的表格。我的问题是我想首先按itemid分组,然后加入table2 saleid。如果我通过saleid单独执行该组,它返回100,000行数据,这很好,但如果我也按照saleid分组加入它,我会得到数百万行,这对我来说是不可行的。任何想法如何使我的工作,所以我可以连接这些表?
所以请记住,itemid有很多我可以分组的项目但是saleid不是唯一的,所以想在小组之后连接这个
这是一个简单的查询,例如,我可以获得数百万行。如果它在group by之后加入if仍然应该是100,000行数据。
select
ta.itemid, ta.saleid, sa.itemid
from
table1 ta
inner join
saleid sa
where
ta.saleitemid = sa.itemid
group by
itemid, saleid
答案 0 :(得分:0)
如果您使用子查询,然后将该查询加入表2,则可以先执行该组:
SELECT *
FROM
(SELECT itemid, saleid
FROM Table_1
GROUP BY itemid, saleid) sub
INNER JOIN Table_2
ON sub.saleid = Table_2.saleid
编辑:上述查询根据您的评论不适合您,因此我会尝试提出一个问题,让我们了解您真正想要的内容。
假设这是表1:
Itemid saleid
20000 23224
33544 33246
53355 22523
43324 33353
43324 11111
43324 22222
43324 33333
43324 44444
这是表2:
Saleid Rebate
23224 3000
33246 5000
22523 5555
33353 4444
11111 1111
22222 2222
33333 3333
44444 4444
在评论中告诉我们您所需的输出结果。
附加更新:此项显示每个项目ID的总和(回扣):
SELECT itemid, SUM(rebate)
FROM t1 INNER JOIN t2
ON t1.saleid = t2.saleid
GROUP BY itemid
答案 1 :(得分:0)
虽然Group By可以允许您减少查询返回的记录数,但它通常用于聚合(count(),sum(),min(),max()等)。无论添加到Group By子句中的任何内容都会影响返回的记录数,因为您通过更具体的方式创建组,从而降低了将行组合在一起的能力。
听起来你的ItemId表和SalesId表之间有一对多的关系。因此,如果您只是通过ItemId从Item表和组中进行选择,则这是一个更通用的分组,并将记录数减少到表中唯一的ItemIds。如果您在组中包含SalesId,现在您只按ItemId和SalesId的唯一组合进行分组,这将产生更多记录。
如果您将SalesId表加入此查询中,此时无关紧要,只要两者都包含在Group By中,您将始终获得唯一ItemIds和SalesIds的数量。
也许尝试通过提供有关您查询的数据的更多细节来重申您尝试获得的结果,我们可以帮助您编写更加性能友好的选择......