当前位置: 首页 > 知识库问答 >
问题:

(我的)SQL:联接多个表

须彭亮
2023-03-14

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

购买:

id model price
------------
1   1  2500
2   2  14000

制造者:

id  name
-----------
1   Opel
2   Crysler

型号:

id  name    manufacturer  
-------------------------
1   Astra       1
2   C 300       2

在表purchases中,model是一个外键,它链接到model.id。在模型中,“制造商”是一个外键,它与“制造商id”相链接。

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

id model   price  manufacturer
------------------------------
1   Astra  2500   Opel
2   C300   14000  Chrysler

我知道如何在表购买中加入以获取型号的名称。不幸的是,我不知道如何获取制造商?

我的SQL-查询:

SELECT * FROM purchases
JOIN model
ON purchases.model = model.id

共有2个答案

唐景山
2023-03-14

连接表的正确方法是使用< code>JOIN(和相关的)关键字。简单的规则:永远不要在< code>FROM子句中使用逗号。始终使用显式< code>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;
汝臻
2023-03-14

尝试使用'内连接':

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;

您可以使用“位置”连接表。

试试看:

 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

但用“where”不是很好,被认为是一种过时的方式。

有一个类似的问题,也许可以帮助你澄清这个问题:SQL内连接3表?

 类似资料:
  • 问题内容: 我用多个(包括一个)编写了这个SQL请求。 它给了我预期的结果 。 但是,“ Id就像此请求的Linq等效项一样,将其放在应用程序的数据访问层中。 我尝试了类似的东西: 我试图适应这个问题,但我无法弄清楚。我对分组子请求的内部迷失了。 谁能解释我哪里错了? 专家提示:如果有人可以用lambda表达式编写等效项,则可获赠积分 问题答案: 要将SQL转换为LINQ查询理解: 将子选择转换为

  • 问题内容: 大多数SQL方言都接受以下两个查询: 现在显然当您需要外部联接时,需要第二种语法。但是,在进行内部联接时,为什么我应该更喜欢第二种语法(反之亦然)? 问题答案: 在大多数现代数据库中,不赞成使用仅列出表并使用子句指定连接条件的旧语法。 这不仅是为了展示,当您在同一查询中同时使用INNER和OUTER联接时,旧语法可能会变得模棱两可。 让我给你举个例子。 假设您的系统中有3个表: 每个表

  • 问题内容: 我有三个表:R,S和P。 表R通过外键与S连接;有 应该 是S中至少一个的记录,所以我可以加入: 如果S中没有记录,那么我没有行,那很好。 然后表S与P联接,其中记录为P可能存在,也可能不存在,并与S联接。 所以我做 如果我想将第二个JOIN绑定到S而不是R,例如我可以使用括号,该怎么办: 还是这已经是R,S和P之间笛卡尔积的自然行为? 问题答案: 各种外部联接和普通联接都在相同的优先

  • 问题内容: 谁能告诉我如何编写查询并如上所述获取结果,谢谢!我试过加入,左右加入。一切都没有结果。 问题答案: 您可以在这两个表之间写左外部联接最好的理解方法是检查下图 查询您的要求 阅读有关 代码项目的 原始文章将对您有很大帮助:SQL Joins的可视表示 。 在以下位置找到原始版本:MySQL中的JOIN和OUTER JOIN之间的区别 。

  • 问题内容: 我在SQL中有此查询,并且希望它使用Entity Framework 在LINQ中实现它,但是如何应用左外部联接的多个表? 问题答案: 这是使用LINQ实现左外部联接的方式。您应该使用GroupJoin(语法): 该查询联接了三个表。您可以以相同的方式加入其余表。

  • 问题内容: 我有4个不同的表要加入。这些表的结构如下: 从表A开始,我了解如何使用b联接表a和c,因为b具有这些表的主键。我也希望能够在TableA上加入表TableD。下面是我的SQL语句,该语句首先连接表A和B,然后将其连接到C: 当我尝试添加另一个联接以包括D时,出现“ TableD”未知的错误: 问题答案: 您想要更多类似这样的东西: 在您的示例中,您实际上并未包含。您要做的就是像以前一样