powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос
9 сообщений из 9, страница 1 из 1
Запрос
    #32021797
EAGLE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет
Помогите написать запрос для такой задачи:
Есть таблица

Table
(
id int,
ClassId int,
Type int,
Instance int
),

где
id - сквозной Id,
ClassId - id совокупности,
Type - тип объекта,
Instance - Id объекта

id ClassId Type Instance
(1, 4, 2002, 5)
(2, 4, 2001, 6)
(3, 4, 2000, 9)
(4, 5, 2001, 1)
(5, 5, 2004, 1)
(6, 6, 2000, 5)
(7, 7, 2004,
(8, 7, 2005, 9)
(9, 7, 2006,
(10, 7, 2006,
...

Необходимо для заданной совокупности пар Type и Instance (например, {2005:56; 2003:3; 2001:34}) найти ClassId; если его нет - вставить указанную совокупность в таблицу и вернуть новый ClassId.
Необходимо найти самое быстрое решение, поскольку в таблице Table может быть несколько десятков млн. записей
...
Рейтинг: 0 / 0
Запрос
    #32021799
Denis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
это можно реализовать примерно такой процедурой(если речь идет о MSSQL):
create procedure p
@T int, @I int
as
if not exists(
select Classid from table
where Type=@T and Instance=@I)
begin
insert into table values (значение id,значение Classid,@T,@I)
select значение Classid
end
else
select Classid from table
where Type=@T and Instance=@I
...
Рейтинг: 0 / 0
Запрос
    #32021800
Denis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
это можно реализовать примерно такой процедурой(если речь идет о MSSQL):
create procedure p
@T int, @I int
as
if not exists(
select Classid from table
where Type=@T and Instance=@I)
begin
insert into table values (значение id,значение Classid,@T,@I)
select значение Classid
end
else
select Classid from table
where Type=@T and Instance=@I
...
Рейтинг: 0 / 0
Запрос
    #32021801
EAGLE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нет, на входе процедуры не одна пара значений, а произвольное количество
Т.е. на входе должна быть таблица совокупностей:
(2000, 45)
(2001, 46)
(2003, 55)
или
(2000, 45)
или
(2000, 45)
(2001, 46)
у всех этих совокупностей должен быть разный ClassId
...
Рейтинг: 0 / 0
Запрос
    #32021805
EAGLE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Совсем забыл - SQL 7.0
Хотя буду рад любому решению
...
Рейтинг: 0 / 0
Запрос
    #32021807
EAGLE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SergSuper, Garya, Glory и другие профи, вся надежда на вас
Неужели ни у кого не возникало подобной задачи?
...
Рейтинг: 0 / 0
Запрос
    #32021813
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вызывает вопросы вот это утверждение
>Нет, на входе процедуры не одна пара значений, а произвольное количество
>Т.е. на входе должна быть таблица совокупностей
Что значит произвольное ? Таблица как входной параметр ?
Или перед вызовом процедуы имеется уже таблица, куда занесено это "произвольное количество пар значений" ?
...
Рейтинг: 0 / 0
Запрос
    #32021840
EAGLE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Glory Да, перед вызовом процедуы уже имеется таблица
...
Рейтинг: 0 / 0
Запрос
    #32021841
EAGLE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Решение найдено, вопрос снимается
Всем спасибо
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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