(My)SQL:连接多个表

Posted

技术标签:

【中文标题】(My)SQL:连接多个表【英文标题】:(My)SQL: Join multiple tables 【发布时间】:2016-09-03 03:31:55 【问题描述】:

我是 (My)SQL 新手,需要一些帮助: 在一个数据库中,我有 3 个表,例如:

购买:

id型号价格 ------------ 1 1 2500 2 2 14000

制造商:

身份证名称 ------------ 1 欧宝 2 克莱斯勒

型号:

id 名称 制造商 ------------------------- 1 阿斯特拉 1 2 C 300 2

在表中购买 model 是一个外键,并且 链接到 model.id。在模型中,manufacturer 是一个外键并链接到manufacturer.id

我的目标是如下所示的表格:

id 型号 价格 制造商 ------------------------------ 1 阿斯特拉 2500 欧宝 2 C300 14000 克莱斯勒

我知道如何在购买表中进行 JOIN 以获取模型的名称。不幸的是,我不知道如何获得制造商?

我的 SQL 查询:

从购买中选择 * 加入模型 ON 购买.model = model.id

【问题讨论】:

编辑您的问题并包含您确实知道如何编写的查询。作为提示:最终查询只是多了一个JOIN @GordonLinoff 我编辑了我的问题。我的方法类似于(对于第二个 JOIN):JOIN manufacturer ON purchases.name = manufacturer.id,但是对于 SQL purchaes.name 是一个未知子句。 【参考方案1】:

用'inner join'试试:

select m.name as model, p.price, mf.name as manufacturer
from purchases p 
inner join
model m on p.model = m.id 
inner join
manufacturer mf on m.manufacturer = mf.id;

您可以使用 'where' 加入您的表格。

试试看:

 select m.name as model, p.price, mf.name as manufacturer
 from purchases p, manufacturer mf, model m
 where m.manufacturer = mf.id
 and p.model = m.id

但是用“哪里”就不是很好了,算个古板的方式。

有一个与您类似的问题,也许可以帮助您澄清问题: SQL Inner-join with 3 tables?

【讨论】:

@PaulSpiegel 我没有忘记这个条件。请检查文本。 抱歉,在您发布您的评论之前,我已经删除了我的评论。但是,如果您使用JOIN .. ON ..,我可能不会监督这种情况。 我没有对答案投反对票,但投赞成票是完全不合适的。不要在FROM 子句中使用逗号。这是一种古老的语法,已经被更强大的 JOINON 关键字所取代——很多很多年了。 @GordonLinoff 我更新了我的答案。感谢您的合作【参考方案2】:

连接表的正确方法是使用JOIN(和相关的)关键字。简单规则:永远不要FROM 子句中使用逗号。始终使用显式 JOIN 语法:

 select m.name as model, p.price, mf.name as manufacturer
 from purchases p JOIN
      model m
      on p.model = m.id
      manufacturer mf
      on m.manufacturer = mf.id;

【讨论】:

您的评论与问题无关,因为 OP 已经在使用 JOIN 语法。顺便说一句:缺少第二个 JOIN 关键字。 @PaulSpiegel 。 . .该问题的原始版本没有示例查询。而且,当我写这篇文章时,另一个答案是只使用逗号。

以上是关于(My)SQL:连接多个表的主要内容,如果未能解决你的问题,请参考以下文章

SQL连接多个表

SQL 2012 将来自多个表的多个查询与连接和计数合并到一个表中

SQL:连接多个表

在连接表语句中访问 SQL 多个 HAVING

连接多个表后如何从sql查询结果中删除重复记录

SQL:具有相似表的多个左连接