2009-06-15 77 views
-2

我有这个疑问:SQL查询返回的,而不是针对它的比较值

SELECT web.KONTO, LAGKART.VARENUMMER, LAGKART.GRUPPE, LAGPRIS.PRIS, LAGKART.VARENAVN1, LAGPRIS.LXBENUMMER, LAGPRIS.ENHED 
FROM LAGKART 
INNER JOIN 
     LAGPRIS 
ON  LAGKART.VARENUMMER = LAGPRIS.VARENUMMER 
INNER JOIN 
     DEBWEBVARER web 
ON  web.VARENUMMER = LAGPRIS.VARENUMMER 
WHERE LAGPRIS.ENHED = web.ENHED 
     AND web.KONTO = ' 00000001' 
ORDER BY 
     LAGKART.VARENAVN1 ASC 

而且它产生:

KONTO |VARENUMMER|GRUPPE|PRIS   |VARENAVN1|LXBENUMMER|ENHED 

    00000001|003  |1  |0.000000000000|765402 |stk 

    00000001|003  |1  |0.000000000000|4418625 |kg 

的问题是:

在表DEBWEBVARER有0行包含KONTO ='00000001'

任何人都能弄清楚为什么它指定KONTO为'00000001'in代替比较?

+0

如果您需要澄清,请提出要求,我会回复迅速 – jAST 2009-06-15 15:18:24

+0

你在“00000001”过滤或= '00000001'? – 2009-06-15 15:19:20

+0

..dang,空格被删除 – 2009-06-15 15:19:51

回答

4

在表DEBWEBVARER有含KONTO = ' 00000001'

有含KONTO = ' 00000001'(与2前导空格)至少一排,这是您的查询返回0行。

如果发出此查询:

SELECT * 
FROM DEBWEBVARER web 
WHERE web.KONTO = ' 00000001' 

,你可以看到什么呢该行(或列)的样子。

你能不能也请发出以下查询:

SELECT TOP 1 
     CAST(KONTO AS BINARY), 
     CAST(' 00000001' AS BINARY), 
FROM DEBWEBVARER web 
WHERE web.KONTO = ' 00000001' 

再次,复制和粘贴您的过滤器到两个WHERESELECT条款?

1

什么字段类型是KONTO,听起来像客户。如果这是一个int,那么这两个值都是1,因此是相同的。

此外,KONTO ='00000001'中的空格是否意味着在那里,或者仅仅是从编辑文本的答案?

您可能希望显式设置比较类型varchar,然后比较(使用SQL转换或在KONTO和希望匹配的字符串上的转换运算符)。

1

问题解决:

DB管理员已经在数据库上设置了一些更加奇怪的过滤。我不知道他在做什么,但显然当我选择所有事物时,它只返回253行,当表中有33000行时。

因此,KONTO ='00000001'的行实际上存在,但是当我选择“显示所有表格数据”时没有显示。

谢谢你的答案,对不起,浪费了你的时间在这种情况下:)