powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Перенос запроса с Microsoft SQL на PostgreSql
8 сообщений из 8, страница 1 из 1
Перенос запроса с Microsoft SQL на PostgreSql
    #39893372
legis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Недавно столкнулся с Postgre.
Переделал запрос, но все равно почему-то не работает.
Подскажите пожалуйста где может быть проблема и как ее решить.

Код на JS идет прямое обращение к sql.
Переделал:
var local_sql = "";
local_sql += "WITH dbo.Rec AS (" + "\r\n";
local_sql += " SELECT DISTINCT" + "\r\n";
local_sql += " c.id" + "\r\n";
local_sql += " ,c.fullname" + "\r\n";
local_sql += " ,0 AS level" + "\r\n";
local_sql += " FROM" + "\r\n";
local_sql += " dbo.func_managers AS fm" + "\r\n";
local_sql += " INNER JOIN dbo.collaborators AS c ON fm.object_id = c.id AND fm.is_native = 1" + "\r\n";
local_sql += " WHERE" + "\r\n";
local_sql += " fm.person_id = " + curUserID + "\r\n";
local_sql += " AND fm.catalog = 'collaborator'" + "\r\n";
local_sql += " AND 1 = (" + "\r\n";
local_sql += " SELECT " + "\r\n";
local_sql += " limit 1" + " \r\n";
local_sql += " COUNT(fm.id)" + "\r\n";
local_sql += " FROM" + "\r\n";
local_sql += " dbo.func_managers AS fm" + "\r\n";
local_sql += " INNER JOIN dbo.boss_types AS bt ON bt.code = 'director_dc' AND fm.boss_type_id = bt.id" + "\r\n";
local_sql += " WHERE" + "\r\n";
local_sql += " fm.person_id = " + curUserID + "\r\n";
local_sql += " AND fm.catalog = 'subdivision'" + "\r\n";
local_sql += " )" + "\r\n";
local_sql += " UNION ALL" + "\r\n";
local_sql += " SELECT " + "\r\n";
local_sql += " c.id" + "\r\n";
local_sql += " ,c.fullname" + "\r\n";
local_sql += " ,t.level + 1" + "\r\n";
local_sql += " FROM" + "\r\n";
local_sql += " dbo.func_managers AS fm_1" + "\r\n";
local_sql += " INNER JOIN dbo.collaborators AS c ON fm_1.object_id = c.id AND fm_1.is_native = 1" + "\r\n";
local_sql += " INNER JOIN (" + "\r\n";
local_sql += " SELECT * FROM dbo.Rec" + "\r\n";
local_sql += " ) AS t ON fm_1.person_id = t.id AND fm_1.is_native = 1" + "\r\n";
local_sql += " WHERE" + "\r\n";
local_sql += " fm_1.catalog = 'collaborator'" + "\r\n";
local_sql += ")" + "\r\n";
local_sql += "SELECT " + "\r\n";
local_sql += "limit 1" + " \r\n";
local_sql += " c.id " + "\r\n";
local_sql += "FROM " + "\r\n";
local_sql += " dbo.collaborators AS c " + "\r\n";
local_sql += " INNER JOIN dbo.positions AS p ON p.id = c.position_id " + "\r\n";
local_sql += " INNER JOIN dbo.subdivision] AS s ON s.id = p.parent_object_id " + "\r\n";
local_sql += " INNER JOIN dbo.Rec ON c.id = Rec.id " + "\r\n";
local_sql += "WHERE " + "\r\n";
local_sql += " c.id = " + owner_id + "\r\n";
local_sql += " AND dbo.Rec.level < 2" + "\r\n";
...
Рейтинг: 0 / 0
Перенос запроса с Microsoft SQL на PostgreSql
    #39893386
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
legis,

и как. вы считаете нормальным вывалить простыню конкатенации с формулировкой "я что-то поменял, найдите ошибку"? При том ошибку так же надо угадать.

Оформите вопрос нормально.
...
Рейтинг: 0 / 0
Перенос запроса с Microsoft SQL на PostgreSql
    #39893407
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
legis
Недавно столкнулся с Postgre.
Переделал запрос, но все равно почему-то не работает.
Подскажите пожалуйста где может быть проблема и как ее решить.

Код на JS идет прямое обращение к sql.
Переделал:
var local_sql = "";
local_sql += "WITH dbo.Rec AS (" + "\r\n";
local_sql += " SELECT DISTINCT" + "\r\n";
local_sql += " c.id" + "\r\n";
local_sql += " ,c.fullname" + "\r\n";
local_sql += " ,0 AS level" + "\r\n";
local_sql += " FROM" + "\r\n";
local_sql += " dbo.func_managers AS fm" + "\r\n";
local_sql += " INNER JOIN dbo.collaborators AS c ON fm.object_id = c.id AND fm.is_native = 1" + "\r\n";
local_sql += " WHERE" + "\r\n";
local_sql += " fm.person_id = " + curUserID + "\r\n";
local_sql += " AND fm.catalog = 'collaborator'" + "\r\n";
local_sql += " AND 1 = (" + "\r\n";
local_sql += " SELECT " + "\r\n";
local_sql += " limit 1" + " \r\n";
local_sql += " COUNT(fm.id)" + "\r\n";
local_sql += " FROM" + "\r\n";
local_sql += " dbo.func_managers AS fm" + "\r\n";
local_sql += " INNER JOIN dbo.boss_types AS bt ON bt.code = 'director_dc' AND fm.boss_type_id = bt.id" + "\r\n";
local_sql += " WHERE" + "\r\n";
local_sql += " fm.person_id = " + curUserID + "\r\n";
local_sql += " AND fm.catalog = 'subdivision'" + "\r\n";
local_sql += " )" + "\r\n";
local_sql += " UNION ALL" + "\r\n";
local_sql += " SELECT " + "\r\n";
local_sql += " c.id" + "\r\n";
local_sql += " ,c.fullname" + "\r\n";
local_sql += " ,t.level + 1" + "\r\n";
local_sql += " FROM" + "\r\n";
local_sql += " dbo.func_managers AS fm_1" + "\r\n";
local_sql += " INNER JOIN dbo.collaborators AS c ON fm_1.object_id = c.id AND fm_1.is_native = 1" + "\r\n";
local_sql += " INNER JOIN (" + "\r\n";
local_sql += " SELECT * FROM dbo.Rec" + "\r\n";
local_sql += " ) AS t ON fm_1.person_id = t.id AND fm_1.is_native = 1" + "\r\n";
local_sql += " WHERE" + "\r\n";
local_sql += " fm_1.catalog = 'collaborator'" + "\r\n";
local_sql += ")" + "\r\n";
local_sql += "SELECT " + "\r\n";
local_sql += "limit 1" + " \r\n";
local_sql += " c.id " + "\r\n";
local_sql += "FROM " + "\r\n";
local_sql += " dbo.collaborators AS c " + "\r\n";
local_sql += " INNER JOIN dbo.positions AS p ON p.id = c.position_id " + "\r\n";
local_sql += " INNER JOIN dbo.subdivision] AS s ON s.id = p.parent_object_id " + "\r\n";
local_sql += " INNER JOIN dbo.Rec ON c.id = Rec.id " + "\r\n";
local_sql += "WHERE " + "\r\n";
local_sql += " c.id = " + owner_id + "\r\n";
local_sql += " AND dbo.Rec.level < 2" + "\r\n";


должно работать ошибок же нет
...
Рейтинг: 0 / 0
Перенос запроса с Microsoft SQL на PostgreSql
    #39893410
kira ivanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
legis,
не понятно, что вы переделали, но такой синтаксис не будет работать в постресе :

Код: sql
1.
2.
local_sql += "	FROM" + "\r\n";
local_sql += "	dbo.func_managers AS fm" + "\r\n";


врядли dbo это существующая схема

Код: sql
1.
2.
3.
4.
5.
local_sql += "	SELECT " + "\r\n";
local_sql += "	limit 1" + " \r\n";
local_sql += "	COUNT(fm.id)" + "\r\n";
local_sql += "	FROM" + "\r\n"; 
local_sql += "	dbo.func_managers AS fm" + "\r\n";


такое то-же не прокатит

Код: sql
1.
2.
local_sql += "	c.id = " + owner_id + "\r\n";
local_sql += "	AND	dbo.Rec.level < 2" + "\r\n";


и это то-же не к постгресу
...
Рейтинг: 0 / 0
Перенос запроса с Microsoft SQL на PostgreSql
    #39894120
Фотография DSKalugin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kira ivanov,
по-человечески это выглядит так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
WITH dbo.Rec AS (
 SELECT DISTINCT
 c.id
 ,c.fullname
 ,0 AS level
 FROM
 dbo.func_managers AS fm
 INNER JOIN dbo.collaborators AS c ON fm.object_id = c.id AND fm.is_native = 1
 WHERE
 fm.person_id = @curUserID
 AND fm.catalog = 'collaborator'
 AND 1 = (
 SELECT 
 limit 1 
 COUNT(fm.id)
 FROM
 dbo.func_managers AS fm
 INNER JOIN dbo.boss_types AS bt ON bt.code = 'director_dc' AND fm.boss_type_id = bt.id
 WHERE
 fm.person_id = @curUserID
 AND fm.catalog = 'subdivision'
 )
 UNION ALL
 SELECT 
 c.id
 ,c.fullname
 ,t.level + 1
 FROM
 dbo.func_managers AS fm_1
 INNER JOIN dbo.collaborators AS c ON fm_1.object_id = c.id AND fm_1.is_native = 1
 INNER JOIN (
 SELECT * FROM dbo.Rec
 ) AS t ON fm_1.person_id = t.id AND fm_1.is_native = 1
 WHERE
 fm_1.catalog = 'collaborator'
)
SELECT 
limit 1 
 c.id 
FROM 
 dbo.collaborators AS c 
 INNER JOIN dbo.positions AS p ON p.id = c.position_id 
 INNER JOIN dbo.subdivision] AS s ON s.id = p.parent_object_id 
 INNER JOIN dbo.Rec ON c.id = Rec.id 
WHERE 
 c.id = @owner_id
 AND dbo.Rec.level < 2


Помимо замечаний от kira ivanov, тут еще и опечатка есть - закрывающая квадратная скобка в строке
INNER JOIN dbo.subdivision] AS s ON s.id = p.parent_object_id
сомневаюсь, что это работало в МСSQL
...
Рейтинг: 0 / 0
Перенос запроса с Microsoft SQL на PostgreSql
    #39894165
kira ivanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DSKalugin,
и не лень вам было :)

Код: sql
1.
 fm.person_id = @curUserID


это не не сюда

Код: sql
1.
WITH dbo.Rec AS (


это то-же не в тему

схема dbo то есть или нет ?
остальное смотреть смысла нет

если что-то и было переделано, то как максимум параметры подключения, ну и про скобку вы верно заметили
...
Рейтинг: 0 / 0
Перенос запроса с Microsoft SQL на PostgreSql
    #39894170
kira ivanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DSKalugin

Помимо замечаний от kira ivanov, тут еще и опечатка есть - закрывающая квадратная скобка в строке
INNER JOIN dbo.subdivision] AS s ON s.id = p.parent_object_id
сомневаюсь, что это работало в МСSQL


вероятно "переделывание запроса" состояло в удалении скобок в именах полей (TSQL)... а здесь "случайно осталась"
...
Рейтинг: 0 / 0
Перенос запроса с Microsoft SQL на PostgreSql
    #39894187
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kira ivanovврядли dbo это существующая схема

dbo в MS SQL это то же, что public в PostgreSQL.
Автору вопроса сначала надо узнать, есть ли уже в PostgreSQL таблицы с данными, импортированными из MS SQL. Без них рано думать над SELECT. Если таблиц нет, то создать и импортировать данные, для чего есть разнообразные средства.
При создании таблиц выбирать соответствие между типами данных в MS SQL и PostgreSQL. В крадце - для простоты в PostgreSql всем строковым полям можно (но необязательно) задавать тип TEXT без указания длины, целым значениям - INTEGER, действительным значениям - DOUBLE PRECISION, дате-времени - TIMESTAMP WITH TIME ZONE, Image в MS SQL заменить на BLOB.

Приведённый синтаксис SELECT не будет работать в PostgreSQL, но с ним надо разбираться после создания и заполнения таблиц.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Перенос запроса с Microsoft SQL на PostgreSql
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]