- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在将桌面应用程序从 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
)));
但它给出了错误
Error Code: 1242. Subquery returns more than 1 row 0.844 sec
需要有关如何处理此问题的建议。
最佳答案
您可以强制子查询仅返回一个前1的记录
所以这个:
DLookUp("[price]","tbl_so_manifest","[so_id] = "
& tbl_trade.so_id & " AND [product_id] = " & tbl_po_manifest.product_id)
变成:
(SELECT TOP 1 Price FROM tbl_so_manifest
WHERE so_ID = tbl_trade.so_id AND product_id = sm.product_id
ORDER BY PRICE, ID DESC) AS MyPrice
因此,您实际上不需要联接,而只需“提取”该值即可。为了将子查询限制为一条记录,TOP 1 和按“PK”排序将确保只返回一行。如果省略“id”,那么如果两个最高价格相同,那么您将得到两行。通过将“ID”添加到订单依据中,即使 5 个价格相同,您也只能获得一行。
如果上下文中的其他表具有相同的列名,那么当然将表限定符添加到上面(但是,它是为了速记而写的)。
因此,作为一般规则,您可以将 dlookup() 替换为上述类型的查询。我对 MySQL 不太熟悉,所以你可能无法使用上面的表别名,但总而言之,使用 top 1 并按“ID(或 PK)”在价格之后或其他情况下进行排序其中可能存在多于一行。在大多数情况下,dlookup() 不应该有多个值(但 dlookup() 始终只返回一个值)。因此,在大多数从 dlookup() 到子查询的“翻译”中, top 1 不应该是必需的。
我不认为 dlookup() 需要“连接”。 Dlookup() 总是命中一张表,从 dlookup() 到子查询的转换也应该如此。您希望选取列、表格,然后是条件)。
如果 dlookup() 是 FK 值,则左连接到查找表会更容易,不会导致查询中出现额外的行,但任何一种方法都可以。我发现子查询与主查询返回的行数“困惑”的可能性较小。
因此,dlookup() 到子查询是一对一的转换。不需要加入,并且正如在大多数情况下所指出的,在大多数情况下不需要 TOP + 附加的“id/pk”。
关于mysql - 子查询在 SELECT 部分返回多于 1 行(Dlookup 到 MySql),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58399142/
我有以下型号:http://slexy.org/view/s20T8yOiKZ from mxutils.cms_services import generate_secid from django.
我遇到了一个问题..当我用我的程序运行 valgrind 时,我得到了以下输出,这让我很困惑: ==12919== HEAP SUMMARY: ==12919== in use at exit
我有一张产品销售表。每笔销售都有一个项目代码(例如序列号)和一个日期。 item_code | date a | 2013-01-01 a | 2013-01-18 b | 3013-02-10 c
是否可以定义一个不限于 1 个字符的分隔符?基于标题的示例,我想将我的分隔符定义为例如'#+#'。文本文件/行可以包含这两个字符,但您遇到特定子字符串/文本组合的可能性很小。 最佳答案 不可以,您不能
Produce a PDA to recognise the following language : the language of strings containing more a's than
我想做一个程序,想像这样生成一个 process -> n process -> n process 第二级可以使用多处理生成进程吗?使用 python 2.6 的 multiprocessinf 模
我对使用 CNN 进行图像识别非常陌生,目前使用 Keras(VGG 和 ResNet)中提供的几种标准(预训练)架构来执行图像分类任务。我想知道如何将输入 channel 的数量概括为 3 个以上(
我有一个 html 文档,当 URL 长度小于 30 个字符时,我想隐藏其中的一些 id(在本例中为 id="test")。 var test = document.getElementById('t
我有一个以 Qtreewidget(有 3 列)作为中央小部件的主窗口。我想保持第一列和第二列的大小固定,但第二列的大小应等于 qtreewidget 的大小减去其他两列的大小。既然主窗口(也就是树形
我的问题类似于this一。我想知道是否存在一个 PDA,它以随机顺序接受包含 a、b 和 c 的任何单词,其中 a 的总量高于 b 的总量并高于 c 的总量,例如单词“abcacba”将被接受。 最佳
我正在尝试使用准备好的 PDO 语句执行 while 循环,但我只希望它在有任何行时执行。目前我正在使用它,但它似乎缺少第一个结果,大概是因为它移动了指针。 正确的做法是什么? $stmt = $pd
1.实体(表)CurrentyEnitiy.java @Entity(tableName = "Corona") public class CurrentyEntity { @PrimaryKey(a
我是一名优秀的程序员,十分优秀!