Как правильно написать условие для представления Postgresql?

Здравствуйте уважаемые друзья, тему поднимал здесь к сожалению ответа не получил. Попрошу помощи у вас, ибо курение доков ни к чему меня не привело.

Имеется таблица

CREATE TABLE rastitelnos_line
(
  id serial NOT NULL,
  the_geom geometry(MultiLineString,900920),
  gid integer,
  sem18 numeric,
  sem16 character varying(64),
  sem62 character varying(64),
  sem32768 character varying(254),
  sem32769 character varying(254),
  sem79 character varying(64),
  sem93 numeric,
  sem1 numeric,
  sem49 numeric,
  sem61 numeric,
  sem9 character varying(254),
  sem21 character varying(64),
  sem22 character varying(254),
  sem5 numeric,
  sem91 numeric,
  sem92 numeric,
  sem60 numeric,
  sem250 character varying(254),
  objectcode character varying(24),
  objectkey character varying(64),
  objectid character varying(24),
  objectname character varying(254),
  CONSTRAINT rastitelnos_line_pkey PRIMARY KEY (id )
)

Делаю для нее вьюшку, которая будет отображать все значения кроме указанных в фильтре,

CREATE OR REPLACE VIEW rastitelnos_line_10000 AS 
 SELECT *
   FROM rastitelnos_line
  WHERE (rastitelnos_line.objectkey <> 'L0071131000') OR (rastitelnos_line.objectkey  <> 'L0071131100') OR (rastitelnos_line.objectkey <> 'L0071224000') OR (rastitelnos_line.objectkey IS NULL);
 
  ALTER TABLE rastitelnos_line_10000
  OWNER TO alimuradov;
GRANT ALL ON TABLE rastitelnos_line_10000 TO alimuradov;

В итоге у меня во вьюшке отображаются все поля включая те которые указаны в фильтре.

Если же я сделаю фильтр по одному полю
WHERE (rastitelnos_line.objectkey <> 'L0071131000')  OR (rastitelnos_line.objectkey IS NULL);

То вьюшка отображается все записи кроме указанных в фильтре, то есть условие работает. Вопрос, почему условие не работает для нескольких значений????

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Ваш фильтр ничего не

Ваш фильтр ничего не фильтрует, ибо вы ставите OR
Например пусть значение rastitelnos_line.objectkey равно 'L0071131000'
тогда условие rastitelnos_line.objectkey <> 'L0071131000' пропустит эту запись, но уже следующее условие
rastitelnos_line.objectkey <> 'L0071224000' эту запись примет, ведь 'L0071131000' не равно 'L0071224000'
Т.е. меняйте OR на AND и будет вам счастье.
А вообще можно попробовать более компакнтую форму:

вместо

WHERE (rastitelnos_line.objectkey <> 'L0071131000') OR (rastitelnos_line.objectkey  <> 'L0071131100') OR (rastitelnos_line.objectkey <> 'L0071224000') OR (rastitelnos_line.objectkey IS NULL);
 

написать
WHERE rastitelnos_line.objectkey NOT IN('L0071131000', 'L0071224000') ...

Спасибо вам большое за ответ.

Спасибо вам большое за ответ. Проблема была именно в этом. Вместе OR сделал AND теперь все прекрасно работает.

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Back to top

(С) Виктор Вислобоков, 2008-2023