Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Перенос запроса с Microsoft SQL на PostgreSql / 8 сообщений из 8, страница 1 из 1
23.11.2019, 17:09
    #39893372
legis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос запроса с Microsoft SQL на PostgreSql
Недавно столкнулся с 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
23.11.2019, 17:44
    #39893386
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос запроса с Microsoft SQL на PostgreSql
legis,

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

Оформите вопрос нормально.
...
Рейтинг: 0 / 0
23.11.2019, 19:14
    #39893407
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос запроса с Microsoft SQL на PostgreSql
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
23.11.2019, 19:20
    #39893410
kira ivanov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос запроса с Microsoft SQL на PostgreSql
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
25.11.2019, 18:07
    #39894120
DSKalugin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос запроса с Microsoft SQL на PostgreSql
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
25.11.2019, 20:31
    #39894165
kira ivanov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос запроса с Microsoft SQL на PostgreSql
DSKalugin,
и не лень вам было :)

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


это не не сюда

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


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

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

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

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


вероятно "переделывание запроса" состояло в удалении скобок в именах полей (TSQL)... а здесь "случайно осталась"
...
Рейтинг: 0 / 0
25.11.2019, 22:08
    #39894187
Partisan M
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос запроса с Microsoft SQL на PostgreSql
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
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Перенос запроса с Microsoft SQL на PostgreSql / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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