我有两个具有多到多关系的表,我试图在select语句中合并这两个表。我希望看到两个表中的所有记录,但只匹配表A到表b的1条记录,因此null值是可以的。
例如,表A有20个记录,它们只匹配表B中的15条记录。我希望看到所有20条记录,无法匹配的5条记录可以显示为null。
表1
某样代码
苹果公司75
比萨饼75
橙色-6
球- 75
绿色4
红色-6
表2
日期/ id
2月15日
2月11日. 75
1月10日-6
08年4月4日
我需要的结果是
某样东西,日期,Code#,ID#
苹果,2月15日,75,000
比萨饼-11月- 75
橙色/1月-10日-6-6
球\
08年4月4日4
红色-空
发布于 2015-08-24 19:21:24
我在想象这样的事情。您希望对行并排,但其中一个行将比其他行多。
select * /* change to whatever you need */
from
(
select *, row_number() over (partition by "code#" order by "something") as rn
from tableA
) as a
full outer join /* sounds like maybe left outer join will work too */
(
select *, row_number() over (partition by "id#" order by "date" desc) as rn
from tableB
) as b
on b."id#" = a."code#" and b.rn = a.rn事实上,我不知道你将如何在“苹果”和“比萨饼”之后得到“球”,而没有其他专栏来分类。SQL表中的行没有任何排序,您不能依赖select *...的默认列表,也不能假设插入顺序是重要的。
发布于 2015-08-24 18:56:59
一个普通的左撇子应该能帮你。
select tableA.*
, tableB.*
from tableA
left join tableB
on tableB.PrimaryKey = tableA.PrimaryKey发布于 2015-08-24 18:57:34
左外连接
问题变了
使之成为一个完全的外连接
select table1.*, table2.*
from table1
full outer join table2
on table1.Code# = table2.id#对许多人来说,这可能不是一个真实的数字,但我认为这就是你所要求的。
https://stackoverflow.com/questions/32189641
复制相似问题