(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
子句中使用逗号。这是一种古老的语法,已经被更强大的 JOIN
和 ON
关键字所取代——很多很多年了。
@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:连接多个表的主要内容,如果未能解决你的问题,请参考以下文章