我正在为考试做准备,我有一个我不理解的练习
我有一个具有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
答案 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
中的另一行。
因此,您必须使用Transactions
将Clients
与SenderID
进行一次连接以获得发件人的姓名,并使用Clients
将RecieverID
与RewriteRule STRING1\/.*\/STRING2.* https://www.xy.com/ [R=301,L]
进行另一连接以获得收件人的姓名。