微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

数据库表内连接

如何解决数据库表内连接

我希望有一个 GUI,当我单击发票时,它还会在一行中显示来自客户和产品的信息,例如名称、品牌等。 我是否也必须将名称、品牌等也放入 Invoice 并在内部加入所有内容

Invoice Table Customer Table Product Table

解决方法

编辑:

不,无需修改您所指的表格。它们都包含一个从发票表引用的唯一主键列。基于它们,INNER JOIN 可以被公式化。

也许还值得一提:不要将 INNER JOIN 与同样存在的 SELF JOIN 混淆。

不同之处在于 INNER JOIN 仍然根据特定列(例如 id)连接两个不同的表,而 SELF JOIN 正在将单个表与其自身连接。


是的,您需要的是 INNER JOIN发票表 中的信息与 客户表 中的信息以及 >产品表 - 全部基于您给定的发票 ID(列:idInvoice)。

要获得所需的信息,您无需在发票表中添加——因此也无需重复——。由于连接,它们将可用于单个查询中的选择。

您的查询应如下所示:

SELECT *
  FROM invoice inv,customer cust,product prod
WHERE
  inv.idCustomer = cust.idCostumer
AND
  inv.idProduct = prod.idProduct
AND
  inv.idInvoice = ${theIdOfTheInvoiceTheUserClickedOn}

注意:如果您不需要三个表中的所有信息(列)(“*”代表什么),您可以将“*”替换为仅明确说明的枚举要显示的列。例如。 inv.id,cust.FirstName,cust.LastName

取决于您确切使用的数据库技术/方言。上面的示例适用于 Oracle 数据库,也适用于大多数其他数据库,因为查询中仅使用了基本的 SQL 功能。

我假设您没有使用任何像 Hibernate 这样的 ORM 框架,并且您需要自己编写查询(因为您没有提供有关你的技术栈)。如果您使用的是 ORM 框架,则该方法需要看起来不同,但最终生成的查询应该看起来相似。

在上面的查询中,WHERE clause 中的前两个条件隐式地构成了 INNER JOIN,最后第三个条件指定了您要查找的确切条目。

尽管您只询问了是否需要 INNER JOIN,但我在此处向您提供了查询,因为您的问题暗示您不确定如何编写。

您可以将其作为可以与您的解决方案进行比较的工作示例。您应该尝试了解它的工作原理以及如何编写它,并进一步研究 SQL 基础知识,以便您也可以自己编写它。

提示PreparedStatements 是从 Java 以安全的方式对数据库执行此类查询的方法

,

在我看来,根据您的应用程序,您可以使用包含您需要和不需要连接表的内容的平面表。此解决方案适用于数据集较小的情况(例如,在银行业务中,Terminal 表与 ATMTerminalPOSTerminalCashlessTerminal 表之间的关系)。

对于一侧是静态数据(如上例)而另一侧是交易数据(如银行交易)的情况,您应该使用来自事务表到静态数据表。

我建议您对您的问题使用第二种解决方案,并使用外键处理关系并使用连接策略获取您需要的列。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。