我有两张桌子:
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
表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
如果我不对它们进行分组,那么我将拥有数百万条记录,因此我必须以某种方式对其进行分组。 我认为我没有正确地使用灌浆,也许是我加入它们的列。
任何建议都会很受欢迎,因为这看起来很简单但却看不到解决方案。 感谢
谢谢大家的回答。你们都给了我一些我忘记的重要信息。我完全错过了我可以使用工会的事实。话虽如此,我选择了第一个发布的答案(因为或多或少你们都说了同样的话 - 我赞成你们所有人,因为每个答案都让我知道我应该怎么做,再次感谢你们)
答案 0 :(得分:2)
如果我想要第一张表中的所有内容和第二张表中的所有内容,那么这应该是一个完整的外连接,对吗?
根据您对问题的描述以及您的示例"表3",否。您根本不想要JOIN,因为两个表中的行之间没有任何关系。你想要的是一个UNION,因为你想要一个新的结果集,它只是table1中的所有行加上table2中的所有行。
所以(假设他们的列的顺序相同):
SELECT * FROM table1
UNION
SELECT * FROM table2
由于UNION的性质,它基本上会完成您的GROUP BY似乎要做的事情:删除任何重复的行。
答案 1 :(得分:2)
请使用UNION / UNION ALL运算符。因为您的表具有完全相同的列名和相同的列顺序,所以您只需执行
select * from
对他们两个。
如果要删除重复和排序结果,请使用UNION。 如果你没有重复(或者你不在乎),那就使用UNION ALL,因为它更快。
select * from table1
union all
select * from table2
答案 2 :(得分:1)
只需使用UNION
运算符:
SELECT t1.* FROM table1 t1
UNION ALL
SELECT t2.* FROM table2 t2
JOIN
不是一种可行的方式,因为这会使结果集中包含与table1
和table2
对应的新列。根据经验,当您想要将2个表堆叠在一起时,可以使用UNION
,当您想引入新列或优化现有列时,可以使用JOIN
。