JOIN 语句重复行的想法。 我有两个表,并使用 JOIN、LEFT 或 RIGHT 条件将它们连接起来。现在发生了一些有趣的事情,即使第二个表中没有添加数据,我的第一个表中的行也是重复的。因此,在表 1 中,我有 3 行,在任何 JOIN 之后,它会变为 9(3 x 3 个重复项),并且我的 SELECT 中只有表 1 中的数据。
我尝试了多种选择,包括GROUP BY ,到目前为止没有运气。您能指导我找到根本原因吗?
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
保持简单
SELECT * from tb1
LEFT JOIN tb2
ON tb2_key = tb1._nui
应该给你 3 行。
SELECT * from tb1
JOIN tb2
ON tb2_key = tb1._nui
如果 tb2 为空,应该给你 0 行。