首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何查询具有多到多关系的sql server中的2个表以确定差异

如何查询具有多到多关系的sql server中的2个表以确定差异
EN

Stack Overflow用户
提问于 2015-08-24 18:54:36
回答 4查看 133关注 0票数 0

我有两个具有多到多关系的表,我试图在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

红色-空

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-08-24 19:21:24

我在想象这样的事情。您希望对行并排,但其中一个行将比其他行多。

代码语言:javascript
复制
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 *...的默认列表,也不能假设插入顺序是重要的。

票数 1
EN

Stack Overflow用户

发布于 2015-08-24 18:56:59

一个普通的左撇子应该能帮你。

代码语言:javascript
复制
select tableA.*
     , tableB.*
  from tableA
left join tableB
       on tableB.PrimaryKey = tableA.PrimaryKey
票数 1
EN

Stack Overflow用户

发布于 2015-08-24 18:57:34

左外连接

问题变了

使之成为一个完全的外连接

代码语言:javascript
复制
select table1.*, table2.* 
  from table1 
  full outer join table2  
    on table1.Code# = table2.id#

对许多人来说,这可能不是一个真实的数字,但我认为这就是你所要求的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32189641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档