繁体   English   中英

两个表在唯一键上的SQL连接列

[英]SQL join columns of two tables on unique key

假设我有两个表A和B,它们的唯一键如下所示(实际表中当然有更多的行和列):

Unique_Key       A        B
____________________________
    ABC          1        2
    BCD          5        6
    DDD          10       11


 Unique_Key      C        D
____________________________
    ABC          6        7
    BCD          8        9
    DDD          100      200

我想在Unique_KeyUnique_Key两个表的列,以产生以下输出:

Unique_Key       A        B         C         D
_________________________________________________
    ABC          1        2         6         7
    BCD          5        6         8         9
    DDD          10       11        100       200

我已经试过了:

select 
    [A], [C]
from 
    tableA r with (nolock) join tableB l with (nolock) on r.Unique_Key = 
l.Unique_Key

它的工作原理非常好,因为它确实合并了表格,但是却产生了重复的行,我不确定为什么。 从本质上讲,这是我要避免的-重复行。

谢谢!

您可以使用在这种情况下效果很好的连接命令。

SELECT A.Unique_Key, A.Atable_Column1, A.Atable_Column2, B.Btable_Column3, B.Btable_Column4 
From Table1 A  inner join Table2 B
 on A.Unique_Key = B.Unique_Key

您可以通过聚合使用分组

select 
    r.Unique_Key,max([A]), max([C])
from 
    tableA r join tableB l on r.Unique_Key = 
l.Unique_Key
group by r.Unique_Key

如果unique_key在每个表中确实是唯一的,那么它将执行您想要的操作而不会产生重复项:

select r.unique_key, r.a, r.b, l.c, l.d
from tableA r join
     tableB l 
     on r.Unique_Key = l.Unique_Key;

如果重复,则密钥不是唯一的。 您可以通过运行以下命令来识别重复的密钥:

select unique_key
from tableA r
group by unique_key
having count(*) > 1;

和:

select unique_key
from tableB l
group by unique_key
having count(*) > 1;

根据名称的选择,您可能需要修复基础数据。

tableA.AtableB.C都不是唯一的,所以我理解这一点。

Unique_Key | A | B
-----------+---+--
AAA        | 1 | 1
BBB        | 1 | 2
CCC        | 2 | 3

Unique_Key | C | D
-----------+---+--
AAA        | 1 | 1
BBB        | 1 | 2
CCC        | 4 | 5

你会得到

A | C
--+--
1 | 1
1 | 1
2 | 4

你想在哪里

A | C
--+--
1 | 1
2 | 4

为此使用DISTINCT

select distinct tablea.a, tableb.c
from tablea 
join tableb on tablea.unique_key = tableb.unique_key;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM