sql - 没有巧合时如何连接两个表?
问题描述
我有两个要加入的表。我尝试了通常的左右连接,但都没有给出我想要的结果。
表A
ID_A VALUE_A
-----------------
A 1
B 2
表 B
ID_B ID_A VALUE_B
-------------------------
90 A 1
90 C 1
90 E 1
91 A 1
91 B 1
92 B 1
92 E 1
92 F 1
我想得到这个结果:
ID_A VALUE_A ID_B ID_A VALUE_B
-------------------------------------------------
A 1 90 A 1
B 2 90 NULL NULL
A 1 91 A 1
B 2 91 B 1
A 1 92 NULL NULL
B 2 92 B 1
解决方案
如果我理解正确,您需要第一个表的所有组合id_a
以及value_a
与第二个表不同id_b
的所有组合。如果是这样:
select iv.id_a, iv.value_a, ib.id_b, b.id_a, b.value_b
from (select distinct id_a, value_a from a) iv cross join
(select distinct id_b from b) ib left join
b
on b.id_b = ib.id_b and b.id_a = iv.id_a;
cross join
生成行。left join
带来了额外的列。
推荐阅读
- javascript - 从表数据中获取 Javascript 对象数组
- react-native - 是否可以在反应本机路由器通量中创建抽屉菜单?
- asp.net - ResolveUrl 在文件夹中找不到 web 服务
- java - 如何通过 Swagger 将 Java POJO 转换为 JSON 模型和示例,就像它在 swagger-ui 中显示的那样
- r - 在 R 中删除数据框中的行后,如何更新 View() 中的行号?
- mysql - 无法将 None 插入 mysql int 字段
- javascript - 如何覆盖默认浏览器撤消操作
- c# - Appium Chrome 浏览器。如何禁用缓存重置选项
- android - TextView setTexSize 属性在适配器中未按预期工作
- javascript - 填充嵌套模式 Mongoose