如何从两个具有公共列的表中选择多行?

时间:2015-03-15 19:01:55

标签: mysql

我有三张桌子。

system_modules system_lectures system_tutorials

我想从system_lectures和system_tutorials中选择数据,并在system_modules上使用WHERE子句。

到目前为止,我有这个:

SELECT l.lecture_name, t.tutorial_name
FROM system_modules m
JOIN system_lectures l ON m.moduleid = l.moduleid
JOIN system_tutorials t ON m.moduleid = t.moduleid
WHERE m.moduleid = 1

目前在数据库中,每个表中有1条记录。 1个讲座,1个教程。 查询返回数据。但它只返回一行,两个表中的数据并排。我希望它将数据返回两行,就好像你只需将两个表一起加起来一样。

2 个答案:

答案 0 :(得分:1)

执行JOIN的任何形式的查询通常会将所有数据一起返回到一行中。连接的一般思想是将两个或多个表之间的数据匹配到单个输出行中。

如果你想"连接"两个查询的结果,您正在寻找一个UNION: http://dev.mysql.com/doc/refman/5.6/en/union.html

然而,只有当列相同时才会起作用。如果列不同并且您想要单独的行,那么您真正需要做的就是运行多个查询。

答案 1 :(得分:0)

您可以使用union查询执行此操作:

SELECT l.lecture_name 
FROM system_modules m
JOIN system_lectures l ON m.moduleid = l.moduleid
WHERE m.moduleid = 1

UNION ALL -- remove the ALL keyword if you need to eliminate duplicates

SELECT t.tutorial_name
FROM system_modules m
JOIN system_tutorials t ON m.moduleid = t.moduleid
WHERE m.moduleid = 1

此查询将两个集合在一起。它依赖于列l.lecture_namet.tutorial_name的数据类型相同。如果他们不是,并且无法隐式转换,则需要手动将其转换为兼容类型。