对 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_so
、tbl_po
、tbl_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 查询的主要内容,如果未能解决你的问题,请参考以下文章