RUS  ENG 

Фильтрация записей БД с помощью SQL-запроса

Страницы: 1
RSS
Фильтрация записей БД с помощью SQL-запроса, Фильтрация записей БД с помощью SQL-запроса по двум признакам
 
Добрый день, коллеги!

Имеется слой Улицы, включающий БД streets, содержащую записи городских наименований (переулки, улицы, проспекты и т.п.) по нескольким населённым пунктам. Наименование населённого пункта в каждой записи содержит поле CITY. Версия ГИС "Zulu" - 10.0.0.8250u.x64
Для реализации фильтрации и удаления записей БД и оставление городских наименований только по двум населённым пунктам было написана такая строчка SQL-запроса:

DELETE FR OM streets WH ERE NOT (CITY='Ростов-на-Дону' OR CITY='Верхнетемерницкий');

Но ёё ГИС не выполнила и написала ошибку. Подскажите пожалуйста, что я делаю неправильно?
Спасибо!
 
Оператор DELETE не реализован.

У нас первичной является графика, соответственно удалять надо объекты в слое

1) выделить объекты в группу. Способов много, в том числе и запросом SQL (см справку)
2) удалить объекты с карты
3) сжать базу данных, нажав кнопку обновить число записей
 
Добрый день, Дмитрий!
Аналогичный вопрос я задавал в разделе Программирования. Так как он дублирует мой вопрос и вы на него уже ответили, можно мой второй вопрос удалить? Он здесь:https://www.politerm.com/forums/?PAGE_NAME=message&FID=7&TID=4850&TITLE_SEO=...
Изменено: Дмитрий Емельянов - 06.09.2023 13:07:32
 
Дмитрий, можно ещё вопрос в части применения SQL-запросов?
В представленном на сайте вашей компании примере заполнения адресов потребителей посредством SQL-запроса копируются городское наименование и номер дома. А если в адресе дома необходимо было отразить кратко категорию дома (жилой,нежилой) и соответственно в базе данных домов было такое поле с аналогичными данными, как бы тогда для этого случая изменился запрос, подскажите пожалуйста? Тогда бы добавился условный оператор IF?
Спасибо!
 
Если я правильно все понял, поле категорию дома есть в обоих слоях и просто нужно перенести значение из одного слоя в другой, то в этом случае через запятую указывается что и куда писать.

UPDATE L1 SET L1.[Адрес] = L2.[Улица]+" "+L2.[Номер дома],
L1.[Поле тип из слоя сети] = L2.[Поле тип из слоя здания]
FROM [Пример водопроводной сети] AS L1, [Здания] AS L2
WHERE L1.typeid=5 AND L1.Geometry.STWithin(L2.Geometry)
Изменено: Дмитрий Емельянов - 06.09.2023 14:17:35
 
Не совсем так. Требуется не просто скопировать из поля, описывающего тип здания, а добавить буквенный код, обозначающий его тип исходя из информации, содержащейся в аналогичном поле.

L1 SET L1.[Адрес] := L2.[Улица]+" "+L2.[Номер дома];
if L2.[Тип дома] = 'Жилой' then L1.[Адрес] := L1.[Адрес] + ' Ж' else L1.[Адрес] := L1.[Адрес] + ' НЖ';

То, что я хочу реализовать на SQL вторую стоку я написал в стиле а-ля Паскаль. Как это можно написать на SQL, подскажите пожалуйста.
 
Тогда можно использовать case
Код
.....
L1 SET L1.[Адрес] = L2.[Улица] + " "+ L2.[Номер дома] + (
     case [Тип дома]
     when 'Жилой' then " КЖ"
     else " НЖ" 
     end)

Или выполнить в 2 запроса
 
Добрый день, Дмитрий!

Я немного модифицировал Ваш запрос под решение свой задачи. Он отказался работать. Можно Вам я вышлю в личку полный текст SQL-запроса и скрин-шоты? Укажите пожалуйста адрес Вашей электронной почты. Спасибо!
Страницы: 1