Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Parent-child таблица без ключей  [new]
xenix
Guest
Всем здравствуйте,
Есть таблица такого вида
IF OBJECT_ID(N'dbo.TEMPAGENTS',N'U')IS NOT NULL
  DROP TABLE dbo.TEMPAGENTS;
CREATE TABLE dbo.TEMPAGENTS
(
  AGENT_ID INT NOT NULL PRIMARY KEY,
  AGENTNAME VARCHAR(20)NOT NULL,
  SUPERVISORID INT NOT NULL
)  

INSERT dbo.TEMPAGENTS(AGENT_ID,AGENTNAME,SUPERVISORID)
VALUES(-1,'INVALID',-1),
      (2,'ROOT',2),
      (3,'ADMIN',2),
      (4,'AGUSER1',3),
      (5,'AGUSER2',0)--родитель не существует

по факту это "parent-child", но без ключей и во многих записях таблицы указан несуществующий "родитель"
(в примере это строка (5,'AGUSER2',0) ). Уровень вложенности записей неизвестен
Задача - свернуть эту таблицу в нормальный "parent-child"
Я пока смог только заменить несуществующих родителей фиктивным
UPDATE T SET T.SUPERVISORID=
(
  SELECT MIN(AGENT_ID)FROM TEMPAGENTS
)
FROM DBO.TEMPAGENTS T
WHERE NOT EXISTS(SELECT 1 FROM DBO.TEMPAGENTS T1
WHERE T1.AGENT_ID=T.SUPERVISORID)


Вопрос - куда двигаться дальше?

С уважением, xenix
15 мар 16, 12:02    [18932647]     Ответить | Цитировать Сообщить модератору
 Re: Parent-child таблица без ключей  [new]
Glory
Member

Откуда:
Сообщений: 104760
xenix
Задача - свернуть эту таблицу в нормальный "parent-child"

А нормальный - это какой ?
15 мар 16, 12:04    [18932658]     Ответить | Цитировать Сообщить модератору
 Re: Parent-child таблица без ключей  [new]
xenix
Guest
автор
А нормальный - это какой ?

IF OBJECT_ID(N'dbo.TEMPAGENTS',N'U')IS NOT NULL
  DROP TABLE dbo.TEMPAGENTS;

CREATE TABLE dbo.TEMPAGENTS
(
  AGENT_ID INT NOT NULL PRIMARY KEY,
  AGENTNAME VARCHAR(20)NOT NULL,
  SUPERVISORID INT NULL,
    CONSTRAINT FK_SupervisorAgent
    FOREIGN KEY(SUPERVISORID )
    REFERENCES dbo.TEMPAGENTS(AGENT_ID)
)
15 мар 16, 12:07    [18932674]     Ответить | Цитировать Сообщить модератору
 Re: Parent-child таблица без ключей  [new]
Glory
Member

Откуда:
Сообщений: 104760
И по какому алгоритму вы предлагаете менять значения "родитель не существует" ?
15 мар 16, 12:08    [18932678]     Ответить | Цитировать Сообщить модератору
 Re: Parent-child таблица без ключей  [new]
xenix
Guest
автор
И по какому алгоритму вы предлагаете менять значения "родитель не существует" ?

По любому удобному. Я повесил на фиктивного(agent_id=-1)
15 мар 16, 12:10    [18932699]     Ответить | Цитировать Сообщить модератору
 Re: Parent-child таблица без ключей  [new]
Glory
Member

Откуда:
Сообщений: 104760
xenix
По любому удобному. Я повесил на фиктивного(agent_id=-1)

И в чем тогда проблема ?
15 мар 16, 12:11    [18932707]     Ответить | Цитировать Сообщить модератору
 Re: Parent-child таблица без ключей  [new]
xenix
Guest
автор
И в чем тогда проблема ?

как теперь перекачать записи в таблицу с такой структурой:
IF OBJECT_ID(N'dbo.TEMPAGENTS2',N'U')IS NOT NULL
  DROP TABLE dbo.TEMPAGENTS2;

CREATE TABLE dbo.TEMPAGENTS2
(
  AGENT_ID INT NOT NULL PRIMARY KEY,
  AGENTNAME VARCHAR(20)NOT NULL,
  SUPERVISORID INT NULL,
    CONSTRAINT FK_SupervisorAgent
    FOREIGN KEY(SUPERVISORID )
    REFERENCES dbo.TEMPAGENTS(AGENT_ID)
)
15 мар 16, 12:55    [18932931]     Ответить | Цитировать Сообщить модератору
 Re: Parent-child таблица без ключей  [new]
Glory
Member

Откуда:
Сообщений: 104760
xenix
как теперь перекачать записи в таблицу с такой структурой:

insert ... select
15 мар 16, 12:58    [18932937]     Ответить | Цитировать Сообщить модератору
 Re: Parent-child таблица без ключей  [new]
Есть таблица такого вида
Guest
xenix,

залить записи без указания супервизора, запомнить какой новый ID какому старому теперь соответствует, обновить поле с супервизором
15 мар 16, 13:13    [18933008]     Ответить | Цитировать Сообщить модератору
 Re: Parent-child таблица без ключей  [new]
xenix
Guest
Есть таблица такого вида,

Спасибо. Именно этого пинка мне и не хватало
15 мар 16, 14:26    [18933558]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить