Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос / 9 сообщений из 9, страница 1 из 1
30.01.2002, 10:06
    #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
30.01.2002, 10:46
    #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
30.01.2002, 10:48
    #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
30.01.2002, 10:52
    #32021801
EAGLE
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос
Нет, на входе процедуры не одна пара значений, а произвольное количество
Т.е. на входе должна быть таблица совокупностей:
(2000, 45)
(2001, 46)
(2003, 55)
или
(2000, 45)
или
(2000, 45)
(2001, 46)
у всех этих совокупностей должен быть разный ClassId
...
Рейтинг: 0 / 0
30.01.2002, 11:28
    #32021805
EAGLE
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос
Совсем забыл - SQL 7.0
Хотя буду рад любому решению
...
Рейтинг: 0 / 0
30.01.2002, 12:05
    #32021807
EAGLE
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос
SergSuper, Garya, Glory и другие профи, вся надежда на вас
Неужели ни у кого не возникало подобной задачи?
...
Рейтинг: 0 / 0
30.01.2002, 12:57
    #32021813
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос
Вызывает вопросы вот это утверждение
>Нет, на входе процедуры не одна пара значений, а произвольное количество
>Т.е. на входе должна быть таблица совокупностей
Что значит произвольное ? Таблица как входной параметр ?
Или перед вызовом процедуы имеется уже таблица, куда занесено это "произвольное количество пар значений" ?
...
Рейтинг: 0 / 0
31.01.2002, 02:45
    #32021840
EAGLE
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос
Glory Да, перед вызовом процедуы уже имеется таблица
...
Рейтинг: 0 / 0
31.01.2002, 03:35
    #32021841
EAGLE
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос
Решение найдено, вопрос снимается
Всем спасибо
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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