Форум АО "ВЗЛЕТ"

Приборы ЗАО "Взлет" => Отдел программистов => Тема начата: surzhanskyalex от 04.05.2021, 06:07:53



Название: SQL запрос для фомирования адреса точки учета и данных о приборе
Отправлено: surzhanskyalex от 04.05.2021, 06:07:53
я пытаюсь сделать один  запрос к таблицам Node . Address, Equip для формирования списка точек учета с адресами типом и номером прибора.
но из-за разной "длины" адреса (в адресе разное количество элементов город, улица, дом , объект) некоторые заводские номера приборов в выборку не попадают.
Как этот запрос реализован во ВЗЛЕТ СП-4? одним запросом или ВЗЛЕТ СП на каждый адрес делает отдельный запрос? 

SELECT Address.Name AS City, Table_1.Name AS Street, Table_2.Name AS House, Table_3.Name AS Object, Table_4.Name,Table_2.Id, [dbo].[Node].Name, Node.Id, Equip.Name, Equip.SerialNumber FROM Address
LEFT JOIN (SELECT Address.Id, Address.AddressId, Address.Name FROM Address) AS Table_1 ON Address.Id= Table_1.AddressId
LEFT JOIN (SELECT Address.Id, Address.AddressId, Address.Name FROM Address) AS Table_2 ON Table_1.Id= Table_2.AddressId
LEFT JOIN (SELECT Address.Id, Address.AddressId, Address.Name FROM Address) AS Table_3 ON Table_2.Id= Table_3.AddressId
LEFT JOIN (SELECT Address.Id, Address.AddressId, Address.Name FROM Address) AS Table_4 ON Table_3.Id= Table_4.AddressId
LEFT JOIN [dbo].[Node] ON Table_2.Id= Node.AddressId
LEFT JOIN [dbo].Equip ON Node.Id= Equip.Id
Where Address.type =1


Название: Re:SQL запрос для фомирования адреса точки учета и данных о приборе
Отправлено: Дмитрий Пархоменко от 04.05.2021, 10:59:42
Здравствуйте!

Взлет СП явно готовые запросы к БД не использует, он их формирует "на лету" при помощи ORM системы, то есть по факту, у нас нет готовых SQL-запросов.

Могу посоветовать Вам почитать про рекурсивные (иерархические) запросы, это поможет Вам с адресами.
Ну а с другими таблицами уже объедините.


Название: Re:SQL запрос для фомирования адреса точки учета и данных о приборе
Отправлено: surzhanskyalex от 05.05.2021, 08:42:14
Отлично, нашел решение,  спасибо!