连接后,表中的两行在另一个表中显示为两个不同的列

Posted

技术标签:

【中文标题】连接后,表中的两行在另一个表中显示为两个不同的列【英文标题】:Two rows from a table show as two different columns in another table after join 【发布时间】:2020-04-29 22:18:12 【问题描述】:

我有如下表格:

表 A

tableA_key  BillToCustId SoldToCustId 
123         C1           C2    

餐桌定制

ID Name Type
C1 ABC  Bill To
C2 XYZ  Sold To

当我将 Cust 表与表 A 连接并在查询中添加列时,我希望解决方案如下所示:

表 A

tableA_key  BillToCustId BillToName SoldToCustId SoldToName 
123         C1            ABC        C2           XYZ     

我得到了什么:

tableA_key  BillToCustId BillToName SoldToCustId SoldToName 
123         C1            (null)        C2           (null)

问题是 Cust 表中的两行如何成为表 A 中的列?

【问题讨论】:

【参考方案1】:

您可以加入两次:

select 
    a.tablea_key,
    a.billToCustId,
    c1.name billToName,
    a.soldToCustId,
    c2.name soldToName
from tablea a
inner join cust c1 on c1.id = a.billToCustId
inner join cust c2 on c2.id = a.soldToCustId

您可能还需要cust(type) 的加入条件,例如:

select 
    a.tablea_key,
    a.billToCustId,
    c1.name billToName,
    a.soldToCustId,
    c2.name soldToName
from tablea a
inner join cust c1 on c1.id = a.billToCustId and c1.type = 'Bill To'
inner join cust c2 on c2.id = a.soldToCustId and c1.type = 'Sold To'

【讨论】:

以上是关于连接后,表中的两行在另一个表中显示为两个不同的列的主要内容,如果未能解决你的问题,请参考以下文章

使用 codeigniter 将连接表中的列连接到另一列

连接来自两个不同表的两列

即使不是一个表中的所有行在另一个表中都有核心响应者,如何从 MySQL 中的两个表中进行选择?

如何比较同一表中的两行并使用存储过程返回数据作为响应

从表中选择行,其中具有相同 id 的另一个表中的行在另一列中具有特定值

显示来自两个不同表的两列之间的差异(比较表)