gpt4 book ai didi

SQL Server - 在联接中正确分组

转载 作者:行者123 更新时间:2023-12-02 03:36:04 25 4
gpt4 key购买 nike

我有两个表:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com