2016-11-14 3 views
-1

У меня есть строки, как показано нижеNVL Колонка и NULL

ProductId ProductName  ProductDesc  ProductLoc 
101   Camel    Pencil   B-10 
102   Parker   Pen    
103   Mirado   Pen    C-10 

Когда я выполнить следующие действия SQL-запрос

SELECT * 
    FROM tablename 
WHERE productloc = NVL ('', productloc) 

Это дает мне 1-й и 3-й ряд, что я хотел бы достигнуть, если productloc имеет значение null, где условие SQL, то я должен получить все три строки.

Как я могу получить желаемый результат.

+2

hmm..You сравнивает productloc с productloc из того же table..Why? Если вы удалите оператор where, вы получите все строки. –

+0

Держите nvl с обеих сторон. – Buddi

+1

'NVL ('', productloc)' всегда возвращает 'productloc' как' '' 'равно нулю в Oracle – Kacper

ответ

1

select * from tablename;

Это то, что вам нужно в этом случае, потому что ваше место не дает эффекта. Вы сравниваете столбец с самим собой.

Если вы хотите, чтобы фильтровать и включать аннулирует вы можете сделать (но, вероятно, заменить один productloc с некоторого значения:

select * from tablename where productloc = productloc or productloc is null;

Или:

select * from tablename where nvl(productloc, 'SOME_UNIQUE_VAL') = nvl(productloc, 'SOME_UNIQUE_VAL');

, а также заменить один из productloc на какую-либо величину.

1

Try что-то вроде:

SELECT * 
    FROM tablename 
WHERE nvl(productloc,'zzz') = (case when productloc is null then 'zzz' else productloc end) 

Здесь ZZZ некоторое фиктивное значение, которое в противном случае не должны присутствовать в качестве значения в определенном столбце.

1

Я полагаю, три различных решения:

Если вы хотите, чтобы все строки (с productloc утратившим значных), вы можете написать следующий запрос:

SELECT * 
FROM tablename 

Без WHERE положение.

Если вы хотите извлечь все строки с productloc имеет заданное значение или равно нулю, так что вы можете написать следующий запрос:

SELECT * 
FROM tablename 
WHERE productloc IS NULL OR productloc = YOURVARIABLE 

или (последний, без использования OR условие)

SELECT * 
FROM tablename 
WHERE NVL(productloc, YOURVARIABLE) = YOURVARIABLE 
1

I a ssume вы используете Oracle. В Oracle «NULL» не является значением, и из-за этого любая функция сравнения вернет false.

Я рекомендую:

SELECT * 
    FROM tablename 
WHERE (productloc = productloc OR productloc IS NULL) 

Надеется, что это помогает,
SERGIO

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