代码之家  ›  专栏  ›  技术社区  ›  jAST

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

  •  -2
  • jAST  · 技术社区  · 16 年前

    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 回复  |  直到 16 年前
        1
  •  4
  •   Quassnoi    16 年前

    在桌子上 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'
    

    同样,将过滤器复制并粘贴到 WHERE SELECT

        2
  •  1
  •   dove    16 年前

    另外,KONTO='00000001'中的空白是指存在还是仅仅是编辑文本以获得答案?

    您可能希望显式地将comparison设置为varchar类型,然后进行比较(在KONTO和您希望匹配的字符串上使用sql convert或cast运算符)。

        3
  •  1
  •   jAST    16 年前

    问题已解决:

    数据库管理员在数据库上设置了一些wierd过滤。我不知道他在做什么,但显然,当我选择所有内容时,它只返回253行,而实际上表中有33000行。

    因此KONTO='00000001'的行实际上在那里,但在我选择“ShowAll table data”时没有显示。

    感谢您的回答,很抱歉在本例中浪费了您的时间:)