DLookUp查询到MySql

DLookUp查询到MySql,mysql,vba,ms-access,Mysql,Vba,Ms Access,我正在将一个遗留的MS access系统转换为spring boot应用程序,我遇到了一个大问题。我主要完成了从access到mysql的函数转换,但不理解如何将下面的DLookUp子查询转换为mysql子查询 DLookUp("[price]","tbl_so","[so_id] = " & tbl_trade.so_id & " AND [product_id] = " & tbl_po.product_id 我所理解的是,下面的内容不起作用,因为我没有在三个表之间

我正在将一个遗留的MS access系统转换为spring boot应用程序,我遇到了一个大问题。我主要完成了从access到mysql的函数转换,但不理解如何将下面的DLookUp子查询转换为mysql子查询

DLookUp("[price]","tbl_so","[so_id] = " & tbl_trade.so_id & " AND [product_id] = " & tbl_po.product_id
我所理解的是,下面的内容不起作用,因为我没有在三个表之间设置内部联接,tbl_so,tbl_po,tbl_trade


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

一般来说,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

如果有一个以上的零件号与上述匹配,则添加一个TOP 1,并且最好使用具有唯一行PK ID列的order by。因此,查询变成:

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

您的mysql将给您一个错误,您必须先内部连接表。第一次连接从tabl_中选择所有行,以便在第二个表中有一个伙伴,依此类推。但只要两个系统都在运行。看看access返回了什么,看看mysql给你带来了什么。还有一个问题。在您的示例中,如果子查询从tblpart中选择PartDescrt,其中tblpart.PartID=tblOrders.PartNum返回的行数超过1行,该怎么办。我现在面临着一个类似的问题,请看我的编辑:你所要做的就是按某个主键行添加一个订单,而你只得到一个。
  (select TOP 1 PartDescrt from tblParts where tblParts.PartID = tblOrders.PartNum 
     ORDER BY PartDescrt, ID DESC)
  AS Description