用有限的连接条件连接2个表

2024-09-28 03:19:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我对SQL不太熟悉,我正在尝试连接两个表

表A:

ID  Amount    Bank 
123  50        Barclays
123  50        tesco
123  50        HSBC
123  100       LLyods
123  200       MBNA

表B:

^{pr2}$

请注意:在表B中,银行名称与表A相同,但它是用不同的格式编写的,因此我不能加入此表。在

我运行的脚本是:

Select A.*, B.*
FROM TableA  A
Left Join TableB B
on A.ID = B.ID AND A.AMOUNT = B.AMOUNT
;

我得到的结果是

ID  Amount  Bank    ID  AMOUNT  BANK
123 50  Barclays    123 50      aa
123 50  Barclays    123 50      bb
123 50  Barclays    123 50      cc
123 50  tesco       123 50      aa
123 50  tesco       123 50      bb
123 50  tesco       123 50      cc
123 50  HSBC        123 50      aa
123 50  HSBC        123 50      bb
123 50  HSBC        123 50      cc
123 100 LLyods      123 100     dd
123 200 MBNA        123 200     ee

我想要的是

ID  Amount  Bank    ID  AMOUNT  BANK
123 50  Barclays    123 50      aa
123 50  tesco       123 50      bb
123 50  HSBC        123 50      cc
123 100 LLyods      123 100     dd
123 200 MBNA        123 200     ee

我得到的问题是,它将表A的每一行连接到满足连接条件的表B的行;不幸的是,表B没有其他唯一的值可以用作连接条件

能不能请社会各界看看你能不能想点什么,我会非常感激的。谢谢:)


Tags: idamountddeeaaccbankbb
3条回答

要直接获得所需的输出,可以执行以下操作:

SELECT *
FROM TableA a
LEFT JOIN TableB b ON on A.ID = B.ID AND A.AMOUNT = B.AMOUNT
AND 
(
    (a.Bank = 'Barclays' AND b.bank = 'aa') OR
    (a.Bank = 'tesco' AND b.bank = 'bb') OR
    (a.Bank = 'HSBC' AND b.bank = 'cc') OR
    (a.Bank = 'Lloyds' AND b.bank = 'dd') OR
    (a.Bank = 'MBNA' AND b.bank = 'ee')
)

但是如果您有数百个映射,这是一个丑陋的解决方案。它还假设(Bank,ID,Amount)是这两个表的PK。最好的方法是有一个链接/映射表,如上面建议的MorbidGnome,并将其包含在连接中。在

如果您没有从TableB中提取任何数据(如您的示例中所示),那么您可以使用CASE语句而不是连接到TableB:

^{pr2}$

您可以使用内部联接来获得所需的结果

Select A.*
B.*
FROM TableA  A
 INNER JOIN TableB B
   on A.ID = B.ID
    AND A.AMOUNT = B.AMOUNT
; 

您是否可以创建第三个表,将表a的银行值与其对应的表B的银行值相匹配?因为没有某种类型的链接表指定关系,SQL server无法知道“Barclays”=“aa”、“tesco”=“bb”等等。必须存在某种独特的关系,而在提供的两个表中没有这种关系。在

链接表:

Code    Bank 
aa       Barclays
bb   tesco
cc   HSBC
dd   LLyods
e    MBNA

然后可以执行以下操作:

^{pr2}$

相关问题 更多 >

    热门问题