我正在准备考试,直到这个问题出现
这些是表(主键用粗体表示):
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