MYSQL内部连接从IDs获取多个名称

MYSQL内部连接从IDs获取多个名称,mysql,Mysql,我试图在MYSQL中使用内部连接创建一个查询,但无法正常工作 下面是我正在尝试做的一个例子: 请注意,这些不是我正在处理的表。我制作了两张简单的表格来展示我正在努力实现的目标。 以下是表索引关系的图像: 我想从tb\U人员中获取“发送者”和“接收者”姓名,并将其组合为: 表格示例 |发送方|接收方| |约翰|玛丽| 下面是我尝试过但失败的查询之一 SELECT tb_people.p_name AS sender, tb_people.p_name AS receiver FR

我试图在MYSQL中使用内部连接创建一个查询,但无法正常工作

下面是我正在尝试做的一个例子:

请注意,这些不是我正在处理的表。我制作了两张简单的表格来展示我正在努力实现的目标。

以下是表索引关系的图像:

我想从tb\U人员中获取“发送者”“接收者”姓名,并将其组合为:

表格示例

|发送方|接收方|

|约翰|玛丽|

下面是我尝试过但失败的查询之一

SELECT
    tb_people.p_name AS sender,
    tb_people.p_name AS receiver
FROM
    tb_people
INNER JOIN 
    tb_mail
ON (tb_people.id = tb_mail.sender_id)
AND (tb_people.id = tb_mail.receiver_id)
你能告诉我如何解决这个问题吗


提前感谢。

您需要两个
join
s和表别名:

SELECT s.p_name AS sender, r.p_name AS receiver
FROM tb_mail m INNER JOIN
     tb_people r
     ON r.id = m.sender_id INNER JOIN
     tb_people s
     ON s.id = m.receiver_id;
如果您考虑您的
on
状况:

ON (tb_people.id = tb_mail.sender_id) AND
   (tb_people.id = tb_mail.reciever_id)

您将认识到,只有当发送者和接收者是同一个人时,该条件才是正确的。

a WHERE IN更容易!看看它:

SELECT
    tb_people.p_name AS sender,
    tb_people.p_name AS receiver
FROM
    tb_people
WHERE tb_people.id IN (
    SELECT tb_mail.sender_id
    FROM tb_mail
)

这将从存储在数据库中的每封邮件中获取发件人和收件人。

非常感谢。它就像一个符咒。这一直困扰着我一整天,现在它的工作。是的,就像您在“AND”中所说的,我强制查询带来共享ID的条目。