首页 > 解决方案 > 对 MySql 的 DLookUp 查询

问题描述

我正在将遗留的 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_so,,,,tbl_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 查询。还有这个查询的解决方案。

标签: mysqlvbams-access

解决方案


好吧,作为一般规则,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 或访问 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

推荐阅读