2

我的查询如下:

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%'

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

在此处输入图像描述

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

我运行了查询:

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

并得到了这个(如您所见,其中包含一个注释字段,其中包含 3838CS):

在此处输入图像描述

并运行此查询:

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

并得到了这个(Ord_No 存在):

在此处输入图像描述

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

4

4 回答 4

3

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

解释:

您遇到的问题与 BusinessVision 创建表 SALES_HISTORY_DETAIL的索引索引的方式有关。此表的 PK(索引 key0)位于NUMBERRECNO列上。

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

这将为您提供对该表的预期结果,并使用具有性能增益的索引。

请注意,您将在表 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%'

于 2013-07-08T21:32:55.143 回答
1

我认为这是因为您在两个表中都有不同的数字数据类型

于 2013-06-26T04:54:47.390 回答
0

评论栏是文字?你试过了吗

Select h.ord_no
from sales_history_header h
INNER JOIN sales_history_detail d ON d.NUMBER = h.NUMBER 
WHERE cast(d.COMMENTS as varchar(max) LIKE '%3838CS%'
于 2013-06-25T19:19:21.207 回答
0

您的查询没有问题。看起来是数据问题。存储在 SALES_HISTORY_DETAIL 中的“数字”可能有一些空间。很难说 SS 是否有一些价值空间。

运行以下查询以查看您的 SALES_HISTORY_DETAIL 表编号值是否存储正确。

  Select NUMBER, Comments from SALES_HISTORY_DETAIL WHERE NUMBER = '0000125199'
于 2013-06-25T19:16:27.880 回答