【发布时间】:2020-02-12 09:33:52
【问题描述】:
我正在将桌面应用程序从 MS Access VBA 迁移到 Java Springboot 应用程序,我需要在 MySQL 中进行 VBA 查询。 VBA 查询非常大,所以我向您展示一个较小的示例来演示我的情况。 VBA 查询:
SELECT SELECT tbl_trade.id,
DLookUp("[price]","tbl_so_manifest","[so_id] = "
& tbl_trade.so_id & " AND [product_id] = " & tbl_po_manifest.product_id),
// .... many more attributes....
FROM tbl_so_manifest as sm (((
/// 15 nested INNER JOINS ....
INNER JOIN tbl_trade AS t ON sm.so_id = t.so_id
INNER JOIN tbl_po_manifest AS pm ON sm.product_id = pm.product_id
)));
MySQL 转换:
SELECT SELECT tbl_trade.id,
(SELECT sm.product_id
FROM tbl_so_manifest as sm
INNER JOIN tbl_trade AS t ON sm.so_id = t.so_id
INNER JOIN tbl_po_manifest AS pm ON sm.product_id = pm.product_id),
// ......
FROM tbl_so_manifest as sm (((
/// 15 nested INNER JOINS ....
INNER JOIN tbl_trade AS t ON sm.so_id = t.so_id
INNER JOIN tbl_po_manifest AS pm ON sm.product_id = pm.product_id
)));
但它给出了错误
错误代码:1242。子查询返回超过 1 行 0.844 秒
需要有关如何处理此问题的建议。
【问题讨论】:
-
在一个非常高的级别 - 直接的解决方案是让您的每个子查询使用
LIMIT子句 w3schools.com/sql/sql_top.asp 。 Dlookup 返回匹配条件的第一次出现,因此您只需通过获取子查询中返回的第一个值来模拟相同的行为。 -
在 tbl_so_mainfest 中每个唯一的
so_id和product_id是否有多个价格? MySQL 子查询也不会像 MS Access'DLookUp那样检索 price 以及为什么INNER JOIN? -
@Parfait。 tbl_so_mainfest 中没有每个唯一的 so_id 和 product_id 只有一个价格。我使用了内部连接,因为我不确定还有什么。请有任何建议。
-
@Mike。很好的观察,Dlookup 只返回一行。谢谢