繁体   English   中英

调用在两个外键上使用的相同主键以显示不同的行/结果

[英]call same primary key used on two foreign keys to display different rows/results

用户既可以是信件的发送者,也可以是接收者(他们发送一封信件,并且可以回复一封信件)。 因此,用户都存储在我的 tblMembers 中,由 mem_id_PK 区分。 但是,我也想获取用户的用户名。

我的SQL如下:

select tblLetters.letter_id_PK,
    tblLetters.letter_body,
    tblLetters.letter_createdDate,
    tblLetters.FK_member_id_writer AS 'Sender', 
    tblLetters.FK_member_id_adviser AS 'Receiver',
    tblMembers.mem_username AS 'Sender Name',
    tblMembers.mem_username AS 'Receiver Name'
from tblLetters
    inner join tblMembers on tblLetters.FK_member_id_writer = tblMembers.mem_id_PK
--  inner join tblMembers on tblLetters.FK_member_id_adviser = tblMembers.mem_id_PK

返回:

letter_id_PK    letter_body         letter_createdDate      Sender  Receiver    Sender Name Receiver Name
1               Hello how are you?  2020-11-17 16:57:24.420 3       2           Sally       Sally

期待:

letter_id_PK    letter_body         letter_createdDate      Sender  Receiver    Sender Name Receiver Name
1               Hello how are you?  2020-11-17 16:57:24.420 3       2           Sally       John

我的假设是将我的 FK 设置为 mem_username,但我无法像所见的那样与众不同。

您需要使用表名别名:

select tblLetters.letter_id_PK,
    tblLetters.letter_body,
    tblLetters.letter_createdDate,
    tblLetters.FK_member_id_writer AS 'Sender', 
    tblLetters.FK_member_id_adviser AS 'Receiver',
    sender.mem_username AS 'Sender Name',
    receiver.mem_username AS 'Receiver Name'
from tblLetters
    inner join tblMembers as sender on 
tblLetters.FK_member_id_writer = sender.mem_id_PK
 inner join tblMembers as receiver on 
tblLetters.FK_member_id_adviser = receiver.mem_id_PK 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM