我有一个如下所示的表格:
+-----------+--------+------------+ | member_id | name | partner_id | +-----------+--------+------------+ | 1 | John | 2 | | 2 | Eva | 1 | | 3 | Peter | 4 | | 4 | Mia | 3 | | 5 | Rachel | null | +-----------+--------+------------+
I want to display member name and name of its partner. I also need to display members without one. However, this is what I get when I use RIGTH JOIN:
SELECT m1.name, m2.name
FROM members m1
RIGHT JOIN members m2 ON m1.member_id=m2.partner_id
+--------+--------------+ | name | partner_name | +--------+--------------+ | John | Eva | | Eva | John | | Peter | Mia | | Mia | Peter | | Rachel | null | +--------+--------------+
我希望他们作为情侣只显示一次。因此,当我得到 John - Eva 时,我不希望显示 Eva - John。这可以吗?
最佳答案
使用左连接
:
select m.*, mp.name as partner_name
from members m left join
members mp
on m.partner_id = mp.member_id;
您的数据中有重复项,但它们似乎是对称的。一个简单的解决方法是:
select m.*, mp.name as partner_name
from (select m.*
from members m
where m.member_id < m.partner_id or
m.partner_id is null
) m left join
members mp
on m.partner_id = mp.member_id;
Here是一个数据库<> fiddle 。
关于SQL 将表与其自身连接起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63981904/