对 MySql 的 DLookUp 查询

Posted

技术标签:

【中文标题】对 MySql 的 DLookUp 查询【英文标题】:DLookUp query to MySql 【发布时间】:2019-10-11 13:55:07 【问题描述】:

我正在将旧版 MS 访问系统转换为 spring-boot 应用程序,我遇到了一个大问题。我主要完成了将函数从访问权限转换为 mysql 但无法理解如何将以下 DLookUp 子查询转换为 mySql 子查询

DLookUp("[price]","tbl_so","[so_id] = " & tbl_trade.so_id & " AND [product_id] = " & tbl_po.product_id

我的理解是以下行不通,因为我没有在 3 个表之间设置内部联接,tbl_sotbl_potbl_trade

SELECT tbl_so.price FROM tbl_so WHERE tbl_so.so_id = tbl_trade.so_id AND tbl_so.product_id = tbl_po.product_id

我的问题是,在这种情况下以及何时很少使用此 DLookUp 查询时,我如何知道表将如何相互连接。还有这个查询的解决方案。

【问题讨论】:

你的 mysql 会给你一个错误,你必须先内联表。第一个连接从 tabl_so 中选择在第二个表中有伙伴的所有行,依此类推。但只要你让两个系统都运行。看看访问返回什么,看看 mysql 得到了什么。 【参考方案1】:

嗯,作为一般规则,dlookup() 可以替换为左连接。但是,您也可以使用子查询,它们往往会对查询进行“较少”的更改。

所以,如果我们有这个:

SELECT id, partNum, dlookup("PartDescrt","tblParts","PartID  = " & partNum) 
as Description from tblOrders.

您可以将上面的 dlookup() 替换为这样的子查询:

SELECT id, partNum, 
  (select PartDescrt from tblParts where tblParts.PartID = tblOrders.PartNum)
  AS Description
 from tblOrders

上面是 SQL 或 access sql 语法,但很确定 MySQL 应该也一样。

如果有多个 partNumber 与上述匹配,则添加一个 TOP 1,并带有一些唯一行的 order by(最好是 PK ID 列)。于是查询变为:

  (select TOP 1 PartDescrt from tblParts where tblParts.PartID = tblOrders.PartNum 
     ORDER BY PartDescrt, ID DESC)
  AS Description

【讨论】:

另一个问题。如果在您的示例中,子查询(从 tblParts 中选择 PartDescrt,其中 tblParts.PartID = tblOrders.PartNum)返回超过 1 行。我现在面临类似的问题 查看我的编辑:您所要做的就是通过一些 PK 行添加一个订单,您只会得到一个。

以上是关于对 MySql 的 DLookUp 查询的主要内容,如果未能解决你的问题,请参考以下文章

如何对 DLOOKUP() 定义的字段启用过滤?

无法让 DLookup 函数在 Access 2013 中工作

DLookup 多条件运行时错误

Access 2007 表单中的 DLookup 错误

ms访问dlookup函数报错

数据表子表单按列排序