SQL JOIN 两个表并出现重复行

问题描述 投票:0回答:2
寻找关于为什么我的

JOIN 语句重复行的想法。 我有两个表,并使用 JOINLEFTRIGHT 条件将它们连接起来。现在发生了一些有趣的事情,即使第二个表中没有添加数据,我的第一个表中的行也是重复的。因此,在表 1 中,我有 3 行,在任何 JOIN 之后,它会变为 9(3 x 3 个重复项),并且我的 SELECT 中只有表 1 中的数据。

我尝试了多种选择,包括

GROUP BY ,到目前为止没有运气。您能指导我找到根本原因吗?

sql
2个回答
3
投票
您没有将每一行连接到一行。

Table1 Table2 a | b | c x | y | z ---+---+--- ---+---+--- 1 | 2 | 3 1 | 2 | 6 2 | 2 | 4 2 | 2 | 7 3 | 2 | 5 3 | 2 | 8
要连接这些表而不重复,您可以使用:

SELECT * FROM Table1 INNER JOIN Table2 ON Table1.a = Table2.x AND Table1.b = Table2.y
但是,如果我使用以下内容,我会得到 9 行...

SELECT * FROM Table1 INNER JOIN Table2 ON Table1.b = Table2.y
这是因为 Table1 中的每一行都会连接到 Table2 中的 

所有三个

a | b | c | x | y | z ---+---+---+---+---+--- 1 | 2 | 3 | 1 | 2 | 6 1 | 2 | 3 | 2 | 2 | 7 1 | 2 | 3 | 3 | 2 | 8 2 | 2 | 4 | 1 | 2 | 6 2 | 2 | 4 | 2 | 2 | 7 2 | 2 | 4 | 3 | 2 | 8 3 | 2 | 5 | 1 | 2 | 6 3 | 2 | 5 | 2 | 2 | 7 3 | 2 | 5 | 3 | 2 | 8
如果我在 

SELECT

 中包含 Table2 的任何列并不重要,问题在于 
JOIN

SELECT Table1.a, Table1.b, Table1.c FROM Table1 INNER JOIN Table2 ON Table1.b = Table2.y
将给予...

a | b | c ---+---+--- 1 | 2 | 3 1 | 2 | 3 1 | 2 | 3 2 | 2 | 4 2 | 2 | 4 2 | 2 | 4 3 | 2 | 5 3 | 2 | 5 3 | 2 | 5


类似的情况是当您需要在加入数据之前聚合数据时。

Table1 Table2 Month | Val Month | Day | Sales -------+----- -------+-----+------- 1 | 'X' 1 | 1 | 6 2 | 'Y' 1 | 2 | 7 3 | 'Z' 1 | 3 | 6 2 | 1 | 4 2 | 2 | 5 2 | 3 | 6 3 | 1 | 7 3 | 2 | 5 3 | 3 | 3
为了连接这些表而不重复,Table2 需要聚合到与 Table1 相同的粒度。

SELECT * FROM Table1 INNER JOIN ( SELECT Month, SUM(sales) AS sales FROM Table2 GROUP BY month ) AS Table2Monthly ON Table2Monthly.month = Table1.month
    

0
投票
由于没有太多信息可供使用,我的猜测是您正在加入从表一中选择的结果。对于每一行,您都会得到三行的结果,总共九行。

保持简单

SELECT * from tb1 LEFT JOIN tb2 ON tb2_key = tb1._nui

应该给你 3 行。

SELECT * from tb1 JOIN tb2 ON tb2_key = tb1._nui

如果 tb2 为空,应该给你 0 行。

© www.soinside.com 2019 - 2024. All rights reserved.