sql - 查询不返回任何内容

标签 sql pervasive pervasive-sql

我的查询如下:

Select h.ord_no
from sales_history_header h
INNER JOIN sales_history_detail d
ON d.NUMBER = h.NUMBER 
WHERE d.COMMENTS LIKE '%3838CS%'

我没有得到如下所示的结果:

enter image description here

但我应该得到结果,因为:

我运行了查询:

Select NUMBER, Comments from SALES_HISTORY_DETAIL WHERE NUMBER LIKE '%0000125199%'

得到了这个(正如你所看到的,有一个包含 3838CS 的评论字段):

enter image description here

并运行此查询:

Select NUMBER, Ord_No from "SALES_HISTORY_HEADER" WHERE NUMBER = '0000125199'

得到了这个(Ord_No存在):

enter image description here

为什么我的第一个原始查询没有返回结果?我的语法有错误吗?

最佳答案

您的查询没有返回任何内容,因为执行引擎正在使用此特定应用程序 (Sage BusinessVision) 错误引用的索引,您必须解决该问题。

说明:

您遇到的问题与 BusinessVision 创建表 SALES_HISTORY_DETAIL 的索引 index 的方式有关。该表的 PK(索引 key0)位于 NUMBER 列和 RECNO 列上。

有关 BusinessVision 普适索引的详细信息

以下是索引与 BV 配合使用的方式的说明:

如果您运行能够使用索引的查询,您将获得更好的性能。不幸的是,普遍计算 NUMBER 这个索引的方式本身并不起作用。

--wrong way for this table
Select * from SALES_HISTORY_DETAIL WHERE NUMBER = '0000125199'
--return no result

由于普遍处理索引的方式,您应该不会得到任何结果。解决方法是您必须查询 PK 的所有字段才能使其正常工作。在本例中,RECNO 代表从 1 到 999 的记录,因此我们可以使用 RECNO > 0 指定所有记录。

--right way to use index key0
Select * from SALES_HISTORY_DETAIL WHERE NUMBER = '0000125199' and RECNO > 0

这将为您提供该表的预期结果,并使用索引来提高性能。

Note that you will get the same behavior in the table SALES_ORDER_DETAIL

回答你的问题。

您运行以查看详细信息的查询确实执行了表扫描,而不是使用索引。

--the way you used in your question
Select * from SALES_HISTORY_DETAIL WHERE NUMBER LIKE '%0000125199%'

在这种情况下它可以工作,不是因为 Like 关键字,而是因为前导的 '%';删除它,该查询将无法工作,因为引擎将通过使用奇怪的索引进行优化。

在您的原始查询中,因为您普遍使用索引d.NUMBER = h.NUMBER,但您没有得到任何结果,要修复该查询,只需添加(并且 RECNO > 0)

Select h.ord_no
from sales_history_header h
INNER JOIN sales_history_detail d
ON d.NUMBER = h.NUMBER and RECNO > 0
WHERE d.COMMENTS LIKE '%3838CS%'

关于sql - 查询不返回任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17305454/

相关文章:

sql - 从结果中选择最大日期行

将 Pervasive 中的查询结果导出到 txt/csv 文件

php - 存储用户事件? PHP、MySQL 和数据库设计

java.sql.SQLException : Closed Resultset: next on selecting item from ComboBox 异常

pervasive - .DDF 文件有什么用途?

api - 开源音乐流API

mysql - 如何使这个 MySql 查询适应 PervasiveSql?

javascript - 如何将 php 文件转换为 codeigniter

PHP-laravel : How to handle time overlapping in database?

mysql - 在 `articles.id` 子句中加倍 `WHERE` 语句会发生什么情况?