当前位置: 首页 > 面试题库 >

如何使用ID联接多个SQL表?

商风华
2023-03-14
问题内容

我有4个不同的表要加入。这些表的结构如下:

TableA - aID | nameA | dID

TableB - bID | nameB | cID | aID

TableC - cID | nameC | date

TableD - dID | nameD

从表A开始,我了解如何使用b联接表a和c,因为b具有这些表的主键。我也希望能够在TableA上加入表TableD。下面是我的SQL语句,该语句首先连接表A和B,然后将其连接到C:

SELECT TableA.*, TableB.*, TableC.* FROM (TableB INNER JOIN TableA
ON TableB.aID= TableA.aID)
INNER JOIN TableC ON(TableB.cID= Tablec.cID)
WHERE (DATE(TableC.date)=date(now()))

当我尝试添加另一个联接以包括D时,出现“ TableD”未知的错误:

 SELECT TableA.*, TableB.*, TableC.*, TableD.* FROM (TableB INNER JOIN TableA
    ON TableB.aID= TableA.aID)
    INNER JOIN TableC ON(TableB.cID= Tablec.cID)
    INNER JOIN TableA ta ON(ta.dID= TableD.dID)
    WHERE (DATE(TableC.date)=date(now()))

问题答案:

您想要更多类似这样的东西:

SELECT TableA.*, TableB.*, TableC.*, TableD.*
FROM TableA
    JOIN TableB
        ON TableB.aID = TableA.aID
    JOIN TableC
        ON TableC.cID = TableB.cID
    JOIN TableD
        ON TableD.dID = TableA.dID
WHERE DATE(TableC.date)=date(now())

在您的示例中,您实际上并未包含TableD。您要做的就是像以前一样执行另一个联接。

注意:您会注意到我删除了许多括号,因为在大多数情况下,它们实际上并不是必需的,并且只会在尝试阅读代码时增加混乱。正确的嵌套是使代码易于阅读和分离的最佳方法。



 类似资料:
  • 我是(My)SQL的新手,需要一些帮助:在数据库中,我有3个表,一个例子: 购买: 制造者: 型号: 在表purchases中,model是一个外键,它链接到model.id。在模型中,“制造商”是一个外键,它与“制造商id”相链接。 我的目标是一个如下图所示的表格: 我知道如何在表购买中加入以获取型号的名称。不幸的是,我不知道如何获取制造商? 我的SQL-查询:

  • 有没有一种方法可以不使用联接来回答这个问题? 编写一个查询,为每个客户X找到至少订购了一种与X共同产品的另一个客户Y。找到所有这样的客户对(X,Y),并针对每对找到重叠产品的数量。因此,查询应该有三列。按重叠产品的数量对结果进行排序。 问题使用https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_all数据库。 使用联接,我

  • 问题内容: 如何选择多个表并从同一列联接多个行? 它不会返回,并且。我确定此SQL代码段的语法错误。 更新: 显示。移除后 它返回: 但我需要退货: 问题答案: 您可以多次连接到同一张表,而只需提供不同的别名

  • 问题内容: 我开始将DataTables Table插件用于jQuery ,但遇到了一些问题。我从这里使用示例代码。 我有MySQL表女巫看起来像这样: id | 名称| Father_id 是同一表中仅在不同行中的值。因此,如果我想知道父亲的名字,我必须在同一个表中进行搜索。但是DataTable所做的只是按原样显示MySQL表的内容。 在我的数据表中,我想显示如下数据: id | 名称| 父亲

  • 问题内容: 我正在学习加入班级的课程,但是我没有完全掌握其中的一些概念。有人可以解释具有多个联接的语句如何工作吗? 我相信我知道BOOKS表是连接BOOKS和ORDERITEMS的第一个外部联接中的左表。即使没有书的ORDERITEM,也会显示所有的BOOKS。第一次加入后,我不确定真正发生了什么。 当ORDERS加入时,哪个是左表,哪个是右表?客户也一样。这是我迷路的地方。 问题答案: 执行者将

  • 问题内容: 首先,我正在使用Oracle: 表一名称= 表二名称= 有一个名为的列,有一个名为的列。我想加入到其中,是在某个地方的名字。 我试过的 如何更正此查询? 问题答案: 尝试使用以下语法: Oracle的字符串连接运算符是双管道(||)。无效数字错误是因为Oracle需要’+’运算符的数字操作数。