我有这个问题:
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'而不是比较?
答案 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'
再次,将您的过滤器复制并粘贴到WHERE
和SELECT
条款中?
答案 1 :(得分:1)
什么字段类型是KONTO,听起来像客户。如果这是一个int,那么两个值都是1,因此是相同的。
此外,KONTO ='00000001'中的空白是否存在或仅仅是编辑文本以进行回答?
你可能希望显式设置比较类型varchar然后比较(在KONTO和你想匹配的字符串上使用sql convert或cast运算符)。
答案 2 :(得分:1)
问题解决了:
DB-admin已在DB上设置了一些奇怪的过滤。我不知道他在做什么,但显然当我选择一切时它只返回253行,当表中有33000行时。
所以KONTO ='00000001'的行实际上就是那里,但是当我选择“显示所有表数据”时没有显示。
感谢您的回答,很抱歉在这种情况下浪费了您的时间:)