说明两次连接同一张表的含义

时间:2019-06-22 19:08:16

标签: sql

我正在为考试做准备,我有一个我不理解的练习

我有一个具有ClientID的客户表, 还有我的事务表,其中有外键引用了客户端,SenderID和RecieverID(指的是ClientID)

我需要创建一个视图,以显示带有发件人名称和收件人名称的事务,我做到了,但是我不明白它的工作原理以及原因

这是代码:

SELECT CS.Name [SenderName], CR.Name [RecieverName]
FROM Transactions T
INNER JOIN Clients CS
ON CS.ClientID = T.SenderID
INNER JOIN Clients CR
ON CR.ClientID = T.RecieverID

2 个答案:

答案 0 :(得分:1)

每次您需要名称(对于发件人或收件人)时,都需要基于交易表和客户表之间的键的关系

您需要发送者的姓名(首先与Clients联接)和接收者的名称(第二次与Clients联接)

为了避免两个(相同名称)表之间的混淆,您需要一个别名,该别名可以让您加入特定的相关表。.将CS和CR用作表nale别名

这样,就像您使用两个不同的表名(或同一表的逻辑重复)一样

 SELECT CS.Name [SenderName], CR.Name [RecieverName]
    FROM Transactions T
    INNER JOIN Clients CS  ON CS.ClientID = T.SenderID
    INNER JOIN Clients CR  ON CR.ClientID = T.RecieverID

您可以将表的内容视为一组数据。.因此,您使用两次相同的数据集来提取行,每次都将您的关系归类。

答案 1 :(得分:0)

Transactions中的每一行都包含:
一个SenderID,它指向到表Clients中的一行,并且
一个RecieverID,它指向到表Clients中的另一行。
因此,您必须使用TransactionsClientsSenderID进行一次连接以获得发件人的姓名,并使用ClientsRecieverIDRewriteRule STRING1\/.*\/STRING2.* https://www.xy.com/ [R=301,L] 进行另一连接以获得收件人的姓名。