mysql - 如何从联结表中多次引用单个表

标签 mysql sql

我有两个表:

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/

相关文章:

SQL Azure - 一个 session 锁定整个数据库以进行更新和插入

mysql - 你会认为这是一个自然的主键吗?

MySQL 一次计算多个列或单独的事务

mysql - 在 Rails 中,使用 mysql2 gem 从 MySQL 读取点类型时出现问题

mysql - 计算三个表的总和

sql - 循环遍历列 SQL

sql - GRANT EXECUTE 所需的权限

php - 从mysql查询中提取特定日期

php - PDO/SQL 未插入数据 : simple example

mysql - SQLAlchemy 相交错误