将两列连接到同一第三列

时间:2012-06-03 12:59:41

标签: mysql join

很抱歉,如果这篇文章的标题有点令人困惑。我的问题很简单,我知道解决方案与联接有关,但我无法弄清楚相关的帖子。

我在MySQL中整理课程安排,课程有先决条件。为了做到这一点,我有1个表,其中包含所有可用的类(ClassName),当然还有一个主ID(Class_ID)。然后,我在本学期提供了另一个课程表,使用“可用类”表中的信息构建。此表以类的先决条件的唯一ID(ClassSemester_ID),Class_ID和Prerec_ID开头。 Prerec_ID实际上是另一个类的Class_ID。

这意味着在实际计划中,我需要ClassName列以匹配Class_ID和Prerec_ID。更直观:

表1:AllClasses Col1:Class_ID Col2:ClassName

表2:SemesterClasses Col1:ClassSemester_ID Col2:Class_ID Col3:Prerec_ID

如何构造一个查询,同时输出显示其关联ClassName的Class_ID和Prerec_ID?

先谢谢你们!

-CB

3 个答案:

答案 0 :(得分:2)

我相信它会更有效率

select SemesterClasses.Class_ID, AllClasses.ClassName, PreRequisite.ClassName as PreRequisiteName
from SemesterClasses
left join AllClasses on AllClasses.Class_ID = SemesterClasses.Class_ID
left join AllClasses as PreRequisite on PreRequisite.Class_ID = SemesterClasses.Prerec_ID

应返回具有类id,名称和先决条件名称的所有SemesterClasses行。 也可以在年份的学期班中添加列,并将过滤器应用于where。

希望有所帮助

答案 1 :(得分:0)

您想要类及其先决条件类的类名吗?

select Classes.Class_ID, Classes.ClassName, Sem.Prerec_ID, Prereq.ClassName from
AllClasses as Classes inner join
SemesterClasses as Sem on Classes.Class_ID = Sem.Class_ID inner join
AllClasses as Prereq on Prereq.Class_ID = Sem.Prerec_ID

答案 2 :(得分:0)

通常你会使用带别名的同一个表 - 类似这样的东西;

select a.className, b.className
from Classes a, Classes b, mytable
where prereq_id = a.class_id
and sem.class_id = b.class_id