【问题标题】:(My)SQL: Join multiple tables(My)SQL:连接多个表
【发布时间】: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 是一个未知子句。

标签: mysql sql database join


【解决方案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 。 . .该问题的原始版本没有示例查询。而且,当我写这篇文章时,另一个答案是只使用逗号。
猜你喜欢
  • 2020-10-11
  • 1970-01-01
  • 2011-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-29
  • 1970-01-01
相关资源
最近更新 更多