Почему этот оператор SQL не работает?

У меня есть следующий SQL-оператор:

SELECT DISTINCT name FROM log WHERE NOT name = '' AND name LIKE '%.EDIT%';

Он отлично работает с Postgres (возвращает все разные имена из журнала, которые не пусты и содержат строку '.EDIT'). Но в Oracle этот оператор не работает. Есть идеи, почему?

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
5
0
422
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Пустая строка в Oracle эквивалентна NULL, что приводит к сбою сравнения. Измените эту часть запроса на NAME IS NOT NULL

Вы можете переписать этот запрос без предложения «NOT NAME = ''».

 SELECT DISTINCT name 
 FROM log
 WHERE name LIKE '%.EDIT%';

Это работает для вас?

Если нет, то чем не работает? Это вызывает ошибку? Возвращаются неправильные результаты?

Пожалуйста, дополните свой вопрос этой информацией :-)

Ответ принят как подходящий
SELECT DISTINCT name FROM log WHERE NOT name = '' AND name LIKE '%.EDIT%';

1) Oracle рассматривает '' как NULL, что означает, что сравнение "NOT name = ''" никогда не бывает истинным или ложным; вместо этого используйте "IS NOT NULL". Но...

2) Второе условие «name LIKE '% .EDIT%' в любом случае не будет соответствовать пустой строке, что делает первое условие избыточным.

Так что перепишите как:

SELECT DISTINCT name FROM log WHERE name LIKE '%.EDIT%';

Спасибо за эту помощь. Работает нормально! Я такой идиот насчет лишнего. Но я также не знал, что Oracle считает '' NULL. Спасибо, теперь работает.

Mnementh 27.10.2008 19:20

Другие вопросы по теме