SQL查询返回一个值而不是与之进行比较

时间:2009-06-15 15:13:16

标签: sql sql-server

我有这个问题:

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'而不是比较?

3 个答案:

答案 0 :(得分:4)

  

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

至少有一行包含KONTO = ' 00000001'(带2个前导空格),您的查询会返回该行。

如果您发出此查询:

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 :(得分:1)

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

此外,KONTO ='00000001'中的空白是否存在或仅仅是编辑文本以进行回答?

你可能希望显式设置比较类型varchar然后比较(在KONTO和你想匹配的字符串上使用sql convert或cast运算符)。

答案 2 :(得分:1)

问题解决了:

DB-admin已在DB上设置了一些奇怪的过滤。我不知道他在做什么,但显然当我选择一切时它只返回253行,当表中有33000行时。

所以KONTO ='00000001'的行实际上就是那里,但是当我选择“显示所有表数据”时没有显示。

感谢您的回答,很抱歉在这种情况下浪费了您的时间:)