MySQL联结表连接

标签 mysql

我需要将与 session 关联的所有教育 worker 作为串联列表返回,但要在联接中执行此操作(不要问 - 我知道有多种方法可以执行此操作,但我正在与图书馆合作不会接受这些方法 ;-))

我有一个 sessions 表,其中包含 session_idsession_name

| session_id | session_name |
+------------+--------------+
| 1          | Swimming     |
| 2          | Chess        |

我有一个 session_educators 表,它基本上是一个联结表 session_idcontact_id

| session_id | contact_id |
+------------+------------+
| 1          | 1          |
| 1          | 2          |
| 2          | 3          |
| 2          | 4          |

我有一个包含contact_idfull_namecontacts

| contact_id | full_name    |
+------------+--------------+
| 1          | Fred Bloggs  |
| 2          | Mary Bloggs  |
| 3          | Mark Smith   |
| 4          | Shelly Smith |

到目前为止,这似乎是我最接近的:

SELECT
    sessions.session_id,
    sessions.name,
    educators.names
FROM
    `sessions`
LEFT JOIN
    (
        SELECT
            GROUP_CONCAT(contacts.full_name SEPARATOR ', ') as names
        FROM
            `contacts`
        WHERE
            contact_id 
        IN 
            (
                SELECT
                    contact_id
                FROM
                    session_educator
                WHERE
                    session_educator.session_id = sessions.session_id
            )
    ) `educators`
USING
    (`session_id`)

但我真的在黑暗中摸索着想弄明白,有人能帮忙吗?

正如您可能从查询中看出的那样,我想要的是这样的结果:

| session_id | session_name | educators                |
+------------+--------------+--------------------------+
| 1          | Swimming     | Fred Bloggs, Mary Bloggs |
| 2          | Chess        | Mark Smith, Shelly Smith |

非常感谢任何帮助 - 即使只是说无法完成!

最佳答案

你不应该为此需要子查询。它是一些连接和聚合:

select s.session_id, s.session_name,
       group_concat(e.name separator ', ') as educators
from sessions s left join
     session_educators se
     on se.session_id = s.session_id left join
     educators e
     on e.educator_id = se.educator_id
group by s.session_id;

关于MySQL联结表连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32798096/

相关文章:

mysql - 将 mod_mysql、mod_xml 和 mod_zlib 添加到 apache

MySQL,选择,合并表

mysql - 关于 mysql 或其他 DBMS 中的外键约束

mysql - 使用 SQL 从同一个表中的两行中选择

php - 无法使用 MYSQL 数据库项目填充保管箱

php - 从 SHOW TABLES 查询打印值

mysql - 非常慢的改变表(即使没有行)

mysql - InnoDB:破坏和修复索引

mysql - sql设置类型匹配

mysql - 如何检查特定数据库的 MySQL 引擎类型?