我有两个表:
contacts table:
----------------------------------------------
| contactId | firstName | lastName | birthday |
----------------------------------------------
和
birthdayEvents table:
---------------------------------------------
| birthdayEvtId | birthdayPerson | contactee |
---------------------------------------------
在 birthdayEvents 表中,birthdayPerson 和 contactee 都是引用 contacts.contactId 值的外键。
我的 birthdayEvents 表的结构使得一个 birthdayPerson 可以有多个联系人(例如,这些是被邀请参加聚会的人)
birthdayEvents:
---------------------------------------------
| 1 | 1 | 2 |
---------------------------------------------
| 2 | 1 | 3 |
---------------------------------------------
| 3 | 1 | 4 |
---------------------------------------------
| 4 | 2 | 1 |
---------------------------------------------
| 5 | 2 | 4 |
---------------------------------------------
| 6 | 2 | 5 |
etc...
我想要一个列出生日人姓名和每个联系人姓名的查询。这个我试过了
SELECT bp.firstName, bp.lastName, c.firstName, c.lastName
FROM contacts AS bp
INNER JOIN birthdayEvents AS be
INNER JOIN contacts AS c
WHERE (bp.contactId = be.birthdayPerson) AND
(c.contactId = be.contactee)
但是它不起作用,我得到一个语法错误。我不知道如何编写此查询。
最佳答案
您可以尝试加入 两次 contacts
表:
SELECT
b.birthdayEvtId,
CONCAT(c1.lastName, ', ', c1.firstName) AS birthday_person,
CONCAT(c2.lastName, ', ', c2.firstName) AS contactee
FROM birthdayEvents b
LEFT JOIN contacts c1
ON b.birthdayPerson = c1.contactId
LEFT JOIN contacts c2
ON b.contactee = c2.contactId;
关于mysql - 如何从联结表中多次引用单个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57049152/