连接两个表,其中一个包含另一个
Posted
技术标签:
【中文标题】连接两个表,其中一个包含另一个【英文标题】:Joining two tables, one of which containing the other 【发布时间】:2019-06-25 15:29:45 【问题描述】:我是 SQL 领域的新手(我的问题可能很容易解决)。 另外,我只在 Access 上工作。
我是法国人,我知道我很难解释,所以之后我会给你一个演示。 我有两张桌子,A和B。 两者都有一个列 id 并且 B 的所有 id 都在 A 中(但是 B 有不同的列) 我想加入他们,当然,基于 id,当有匹配的 id 时,获得一个包含 A 加 B 的表。 因此结果必须具有与表 A 完全相同的行数。
Table A
id - value1 - value2
1 0.5 0.6
2 0.4 0.9
3 0.4 1
4 0.8 1
Table B
id - name1 - name2
1 az at
4 df ml
Result:
id- value1- value2 - name1- name2
1 0.5 0.6 az at
2 0.4 0.9
3 0.4 1
4 0.8 1 df ml
当 A 的元素不在 B 中时,我仍然需要在结果中包含它们,在缺少信息的列中具有空值。 如果你看不懂我的英文,看demo就行了,一目了然
我尝试自己编写一个 FULL OUTER JOIN(因为它在 Access 中不存在),但我得到的结果是一个包含很多重复项的表。 我也尝试了很多 JOIN,但我总是得到一个比 A 行多得多的表
提前致谢:)
【问题讨论】:
使用左外连接 嗨。在考虑发布之前,请始终在谷歌上搜索任何错误消息以及您的问题/问题/目标的许多清晰、简洁和准确的措辞,包括和不包括您的特定字符串/名称;阅读许多答案。如果您发布问题,请使用一个短语作为标题。例如:谷歌搜索甚至 'site:***.com sql 连接结果,在缺少信息的列中具有空值'会给出问题标题,其中明确预期称为“左连接”的东西应该返回空值。此外,如果您阅读过关于所有连接的任何介绍的部分,那么您会发现左外连接。 【参考方案1】:我认为你只需要在这里左连接:
SELECT
a.id,
a.value1,
a.value2,
b.name1,
b.name2
FROM TableA a
LEFT JOIN TableB b
ON a.id = b.id;
左连接将保证TableA
中的每一行都会出现在结果集中,即使给定行的id
值与TableB
中的任何值都不匹配。
如果您不希望NULL
出现在那些不匹配的记录的name1
和name2
字段中,请考虑使用Nz(name1, '')
来显示空字符串。
【讨论】:
如果没有看到您的实际数据,我无法解决您的评论。根据您向我们展示的一小部分样本数据,我的回答应该是正确的。以上是关于连接两个表,其中一个包含另一个的主要内容,如果未能解决你的问题,请参考以下文章
如何将一个表与另一个表连接,然后计算非空列并将它们按另外两个字段分组?
客户端一个http连接包含两个方向,一个是这个http连接的输入,另一个是这个http连接的输出。