如何根据TSQL语法解决这个问题?



我正在准备考试,直到这个问题出现

这些是表(主键用粗体表示):

  • Employee(id), name, emailAddress),
  • Email(emailId,发件人id,收件人id,主题)
  • EmailDetails(emailId,日期,状态)

问题说明:

  • 如果两个员工互相发送邮件,则表示两个员工已连接
    • (即。每个员工都应该至少给另一个发过一封或多封电子邮件)。
  • 查找所有已连接的员工对。
    • (返回其ID)。

谁能帮我解决这个问题?

如果id为sender和receiver,则只能检查电子邮件表

SELECT DISTINCT senderID,receiverID  FROM Email e 
WHERE EXISTS (SELECT 1 
FROM Email  
WHERE receiverID = e.senderID AND senderIF = e.receiverID))

这将给你所有对,所以(bob, kate)和(kate, bob)。

select distinct e1.senderID, e1.receiverID
from email e1 join email e2
on e1.receiverID = e2.senderID and e2.receiverID = e1.senderID;

如果只得到其中的一个,在末尾添加一个条件:

where e1.senderId > e1.receiverID 

为了能够正确回答这个问题,您需要标记给定表中的哪些列作为外键,即它们的值彼此对应。雇员表中有发送id和接收id吗?如果是这样:

SELECT 
emp1.id AS sender, 
emp2.id AS receiver 
FROM employee emp1
JOIN email e ON emp1.id = e.senderid
JOIN employee emp2 ON emp2.id = e.receiverid

最新更新