如何在两个表之间创建正确的联接?

Posted

技术标签:

【中文标题】如何在两个表之间创建正确的联接?【英文标题】:How To create correct Join between two tables? 【发布时间】:2015-03-24 10:20:01 【问题描述】:

我有两个表,我想从这两个表中获取数据。

客户详情

Id Customer1 Customer2
1  1         2
2  2         1
3  1         3

CustomerName

Id Name
1  a
2  b
3  c

输出应该是

Id Customer1 Customer2
1   a         b
2   b         a
3   a         c

我尝试了内部连接,但它只适用于一列,而不适用于两列。

我如何从 sql 查询中获取这些数据。

请帮我找到这个。

谢谢

【问题讨论】:

您是否尝试过使用ON 子句中的两列和OR。你试过什么? 【参考方案1】:

使用 2 joins

select t1.id,t2.name customer1 ,t3.name customer2
from customerdetail t1 
join customername t2 on t1.customer1=t2.id
join customername t3 on t1.customer2=t3.id

【讨论】:

【参考方案2】:
SELECT Id,
       CN1.Name AS Name1,
       CN2.Name AS Name2
FROM   CustomerDetails CD
       JOIN CustomerName AS CN1
            ON CD.Customer1 = CN1.ID
       JOIN CustomerName AS CN2
            ON CD.Customer2 = CN2.ID

我会使用LEFT JOIN 这样做,因为这样会更安全。我不知道你是否总是对 Customer1Customer2 都有值

【讨论】:

【参考方案3】:

这应该可行:

SELECT CD.Id,
   CN1.Customer1,
   CN2.Customer2
FROM   CustomerDetails CD
   JOIN CustomerName AS CN1
        ON CD.Customer1 = CN1.ID
   JOIN CustomerName AS CN2
        ON CD.Customer2 = CN2.ID

【讨论】:

以上是关于如何在两个表之间创建正确的联接?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 LINQ lambda 中执行多个表之间的联接

CakePHP:如何使用内部联接从两个表中检索数据?

使用两个字段在两个表之间创建关系

带有内部联接和子查询的 Microsoft Access 更新语句

如何在表之间交换行后正确重新排序 ID(jQuery 和 ASP.NET MVC4)

比较与特定字段有关的两个表之间的差异时如何正确连接