查询没有返回

时间:2013-06-25 19:03:27

标签: 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

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

4 个答案:

答案 0 :(得分:3)

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

说明:

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

有关BusinessVision

的Pervasive索引的详细信息

以下是索引与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%'

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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

  Select NUMBER, Comments from SALES_HISTORY_DETAIL WHERE NUMBER = '0000125199'

答案 3 :(得分: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%'