SQL-запрос возвращает значение вместо сравнения с ним - PullRequest
0 голосов
/ 15 июня 2009

У меня есть этот запрос:

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 ]

4 голосов
/ 15 июня 2009

В таблице 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 голос
/ 15 июня 2009

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

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

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

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

1 голос
/ 15 июня 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...