寻找关于为什么我的 JOIN 语句重复行的想法。 我有两张桌子并加入 JOIN , LEFT 或 RIGHT 条件。现在发生了一些有趣的事情,即使第二个表中没有添加数据,我的第一个表中的行也会重复。因此,在表1中我有3行,在任何 JOIN 之后它变为9(3 x 3重复),我只有 SELECT 中表1的数据。
到目前为止,我尝试了多项选择,包括 GROUP BY ,但没有运气。你能指导我找到根本原因吗?
答案 0 :(得分:2)
您没有将每行连接到一行。
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.a = Table2.x
这是因为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
中包含表2的任何列,那么这不是问题,而是JOIN
的问题。
SELECT
Table1.a,
Table1.b,
Table1.c
FROM
Table1
INNER JOIN
Table2
ON Table1.a = Table2.x
会给......
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
答案 1 :(得分: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行。