2009-06-15 3 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' в вместо сравнения?

+0

Если вам нужны разъяснения, пожалуйста, обратитесь к нему, и я отвечу быстро – jAST

+0

вы фильтрацию на «00000001» или = '00000001' ?? –

+0

..dang, пробелы были удалены –

ответ

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 статей?

+0

Нет, таблица DEBWEBVARER содержит только строки, где KONTO = '12345678' – jAST

+2

@jAST: выдавать запрос, копировать и вставлять ваш фильтр из исходного запроса – Quassnoi

+0

По какой-то причине возвращает все строки. Но проблема в том, что ни одна строка не имеет KONTO, где поле равно = '| 00000001' – jAST

1

Какой тип поля KONTO, звучит как клиент. Если это int, то оба значения равны 1 и, следовательно, одинаковы.

Кроме того, это пробелы в KONTO = '00000001', предназначенные для того, чтобы быть там или это просто от редактирования текста для ответа?

Возможно, вы захотите явно установить сравнение типа varchar, а затем сравнить (используя sql-конвертер или операторы приведения на KONTO и строку, которую вы хотите сопоставить).

+0

KONTO - varchar (10). Да, там должно быть пустое пространство.Это старый NAVISION-db, преобразованный в MS SQL Server, так что все испортилось, я боюсь :) Формат для учетной записи (KONTO): «########» – jAST

1

Проблема решена:

БД-администратор имеет некоторую настройку фильтрации на странную БД. Я понятия не имею, что он делает, но, видимо, когда я выбираю все, он возвращает только 253 строки, когда в таблице задано 33000 строк.

Значения строк с KONTO = '00000001' здесь, но не отображаются, когда я выбрал «Показать все данные таблицы».

Спасибо за ваши ответы, и жаль, что потратил свое время в этом случае :)

Смежные вопросы