加入 MySQL 查询结果

Posted

技术标签:

【中文标题】加入 MySQL 查询结果【英文标题】:Joining MySQL query results 【发布时间】:2013-12-14 03:12:09 【问题描述】:

又一个question I've made before。我想扩展正在查询的表的数量。

情况是:

假设我有 3 个数据库表:

    教师,具有以下字段: 身份证 姓名 主题,具有以下字段: 身份证 姓名 teachers_subjects,具有以下字段: teacher_id subject_id

所以,一些老师有共同的学科。

我考虑过查询的算法

对于subjects表中的每条记录:

选择 Teachers_subjects 表中的计数。 如果计数大于 1 在teacher_subjects中,获取subject_id为s的teacher_id's。

建立关系对。

我需要得到如下输出:

+----------+----------+-----------------------+----------------------------+
| Teacher1 | Teacher2 | NumberOfRelationships |      SubjectsInCommon      |
+----------+----------+-----------------------+----------------------------+
| Ian      | Ralph    |                     4 | Math, Science, English, PE |
| Anna     | Maria    |                     2 | Math, Trigonometry         |
+----------+----------+-----------------------+----------------------------+

所以我在这个 sql 查询中得到了答案:

SELECT @rownum := @rownum + 1 as id, relations.Teacher1, relations.Teacher2, relations.subjects, relations.count
FROM (SELECT t1.name as 'Teacher1', t2.name as 'Teacher2', GROUP_CONCAT(s.name) AS subjects, count(*) AS count
FROM teachers t1 
JOIN teachers t2 ON t1.id > t2.id
JOIN teachers_subjects ts1 ON ts1.teacher_id = t1.id
JOIN teachers_subjects ts2 ON ts2.teacher_id = t2.id AND ts1.subject_id = ts2.subject_id
JOIN subjects s ON ts1.subject_id = s.id
GROUP BY ts1.teacher_id, ts2.teacher_id) as relations,
(SELECT @rownum := 0) r;

但是如果我有更多的表格,例如:

    教师,具有以下字段: 身份证 姓名 主题,具有以下字段: 身份证 姓名 teachers_subjects,具有以下字段: teacher_id subject_id 项目,具有以下字段: project_id 姓名 projects_subjects,具有以下字段: teacher_id project_id reasearches,包含以下字段: research_id 姓名 researches_subjects,包含以下字段: teacher_id project_id

我想得到如下输出:

+----------+----------+-------------------------+--------------------+
| Teacher1 | Teacher2 | NumOfTotalRelationships | ActivitiesInCommon |
+----------+----------+-------------------------+--------------------+
|          |          |                         |                    |
+----------+----------+-------------------------+--------------------+

如果我以后需要添加更多表格怎么办,无论如何它可以用于 n 表格?

【问题讨论】:

您需要动态查询,可能是通过从某些表中选择所有表名和列。我知道在 SP 和触发器中使用动态 SQL 存在问题,在您的服务器端脚本中这样做会更容易。 【参考方案1】:

您可以尝试为低级关系创建视图。然后你可以加入视图以获得任何关系。

【讨论】:

你能举个例子吗?

以上是关于加入 MySQL 查询结果的主要内容,如果未能解决你的问题,请参考以下文章

MySQL - 加入两个查询(UNION?)

MySQL JOIN 多个查询结果到 1 个结果集

数据冗余 - 加入大型结果集

如何让SELECT 查询结果额外增加自动递增序号sqlserver

mysql加入查询喜欢吗?

加入两个表并得到结果