2009-06-15 80 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'的行實際上存在,但是當我選擇「顯示所有表格數據」時沒有顯示。

謝謝你的答案,對不起,浪費了你的時間在這種情況下:)