我有两个表:
table 1:
rN rnk rid rsn rsi tid rd r
abc_1m xy_mfgabc1m_z 1 penta 1 27 2009-01-01 1.2
abc_1m xy_mfgabc1m_z 1 penta 1 27 2009-01-02 0.3
abc_3m xy_mfgabc3m_z 2 penta 1 30 2009-01-01 0.6
abc_3m xy_mfgabc3m_z 2 penta 1 30 2009-01-02 0.4
- rN 是包含 100 多个值的列表
- rnk 也是一个包含 100 多个值的列表
- 也有rid(这和tid有一个代码,具体取决于rN)
- rsn 始终相同
- rsi 始终相同
- tid 是 100 多个值的列表(this 和 rod 有一个代码,具体取决于 rN)
- 从 2009 年至今的第一个日期
- r 是一些数值
表 1 包含超过 100.000 行 表 2 较小,@ 2000 行。
table 2:
rN rnk rid rsn rsi tid rd r
tdf_1y xy_mfgtdf1y_z 90 penta 1 94 2009-01-01 1.7
tdf_1y xy_mfgtdf1y_z 90 penta 1 94 2009-01-02 0.7
tdf_1y xy_mfgtdf1y_z 90 penta 1 94 2009-01-01 0.2
tdf_1y xy_mfgtdf1y_z 90 penta 1 94 2009-01-02 0.9
我想要表 1 中的所有内容,并将表 2 附加到表 1 中。 预期表:
table 3 :
rN rnk rid rsn rsi tid rd r
abc_1m xy_mfgabc1m_z 1 penta 1 27 2009-01-01 1.2
abc_1m xy_mfgabc1m_z 1 penta 1 27 2009-01-02 0.3
abc_3m xy_mfgabc3m_z 2 penta 1 30 2009-01-01 0.6
abc_3m xy_mfgabc3m_z 2 penta 1 30 2009-01-02 0.4
tdf_1y xy_mfgtdf1y_z 90 penta 1 94 2009-01-01 1.7
tdf_1y xy_mfgtdf1y_z 90 penta 1 94 2009-01-02 0.7
tdf_1y xy_mfgtdf1y_z 90 penta 1 94 2009-01-01 0.2
tdf_1y xy_mfgtdf1y_z 90 penta 1 94 2009-01-02 0.9
如果我想要第一个表中的所有内容和第二个表中的所有内容,这应该是完全外连接,对吗?
我的问题是我不知道如何对其进行分组,因为如果我这样做,我将获得 table1 中的所有内容,而不会获得 table2 中的任何内容
select one.* from table1
join table2 two on one.rsn = two.rsn
group by one.rN, one.rnk, one.rid, one.rsn, one.rsi, one.tid, one.rd, one.r
order by rid
如果我不将它们分组,那么我将拥有数百万条记录,因此我必须以某种方式对其进行分组。 我认为我没有正确使用分组依据,也许是我加入它们的列。
任何建议都会受到欢迎,因为这看起来很简单,但看不到解决方案。 谢谢
编辑:
谢谢大家的回答。你们都给了我重要的信息,但我忘记了。我完全错过了我可以使用 union 的事实。话虽这么说,我选择第一个发布的答案作为已接受的答案(因为你们或多或少都说了同样的话 - 我对你们所有人都投了赞成票,因为每个答案都让我了解了我应该如何做这件事,再次感谢你们)
最佳答案
If i want everything from the first table and everything from the second table, this should be a full outer join, right?
根据您对问题的描述以及您的示例“表 3”,没有。您根本不需要 JOIN,因为两个表中的行之间没有关系。您想要的是 UNION,因为您想要一个新的结果集,其中包含 table1 中的所有行加上 table2 中的所有行。
所以(假设它们的列顺序相同):
SELECT * FROM table1
UNION
SELECT * FROM table2
由于 UNION 的性质,它基本上会执行 GROUP BY 似乎要做的事情:删除任何重复的行。
关于SQL Server - 在联接中正确分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33210691/