Вставка данных в таблицу предков и получение данных из таблицы предков - PullRequest
1 голос
/ 02 июля 2019

Я пытаюсь создать таблицу предков для обязательных единиц. Я не уверен, как вставить данные с помощью сценария SQL для уровня 2, 3, и так далее ...

У меня есть три таблицы:

  1. Unit_Of_Competency (Unit_Of_Competency_ID: уникальный идентификатор, UoC_Code: varchar (20), UoC_Title: varchar (200), дескриптор: varchar (500))
  2. Предварительное условие (ID: уникальный идентификатор, Unit_Of_Competency_ID: ссылки на внешний ключ Unit_Of_Competency_ID, Prerequisite_ID: ссылки на внешний ключ Unit_Of_Competency_ID)
  3. Prerequisite_Ancestor (Prerequisite_Ancestor_ID, Unit_Of_Competency_ID: ссылки на внешний ключ Unit_Of_Competency_ID, Prerequisite_ID: ссылки на внешний ключ Unit_Of_Competency_ID)

Таблица единиц компетенции содержит следующие данные:

Unit Of Competency Table

Таблица предварительных условий имеет следующие данные:

Prerequisite Table

При объединении Unit_Of_Competency и Prerequisite мы получаем следующий вывод:

Joined Tables

Мне нужно заполнить таблицу Prerequisite_Ancestor; Я только заселился до уровня 1

Prerequisite Ancestor Table

Мне нужно заполнить таблицу предков для уровня 2, 3, 4 Например,

  1. Теорема Байеса || Отдел || 2
  2. Вероятность || Математика || 2
  3. Теорема Байеса || Математика || 3

То, как я ввел Ancestor_Level 1 в таблицу Prerequisite_Ancestor, использует следующий скрипт:

INSERT INTO Prerequisite_Ancestor (Prerequisite_Ancestor_ID, UoC_ID, Prerequisite_ID, Ancestor_Level)
select newID(), U.Unit_Of_Competency_ID as UoC, P.Prerequisite_ID as Prerequisite, 1 from Prerequisite P 
join Unit_Of_Competency U on P.Unit_Of_Competency_ID=U.Unit_Of_Competency_ID
join Unit_Of_Competency U2 on U2.Unit_Of_Competency_ID=P.Prerequisite_ID

Как мне войти в Уровни 2, 3, ... используя скрипт?

Заранее спасибо:)

1 Ответ

1 голос
/ 03 июля 2019

Вам необходимо создать еще одну таблицу, которая будет использоваться для целей подготовки, которая будет собирать данные из веб-формы, которую вы разрабатываете. И обрезать каждый раз для отправки новой формы. Промежуточная таблица будет состоять из всех столбцов, необходимых для заполнения всех трех таблиц. Если посмотреть на существующие столбцы, промежуточная таблица будет выглядеть так, как будто в ней есть следующие столбцы:

CREATE TABLE LoadUnitsStg(
    StagingID UNIQUEIDENTIFIER NOT NULL PRIMARY KEY DEFAULT NEWID(),
    UoC_Code VARCHAR(50),
    UoC_Title VARCHAR(200),
    UoC_Descriptor VARCHAR(500),
    Pre_UoC_Code VARCHAR(50),
    Pre_UoC_PreReq VARCHAR(50),
    Pre_Pathway VARCHAR(50),
    Anc_UoC_Code VARCHAR(50),
    Anc_UoC_PreReq VARCHAR(50),
    Ancestor_level INT
    )

Теперь загрузите данные из веб-формы в промежуточную таблицу и используйте этот запрос для заполнения данных в требуемых таблицах.

INSERT INTO Unit_Of_Competency ([UoC_Code],[UoC_Title],[Descriptor])
        SELECT DISTINCT(UoC_Code),UoC_Title,UoC_Descriptor FROM LoadUnitsStg stg
            WHERE UoC_Code IS NOT NULL AND NOT EXISTS (
                SELECT 1 FROM Unit_Of_Competency UoC
                    WHERE UoC.UoC_Code=stg.UoC_Code);

    INSERT INTO Prerequisite ([Pathway],[Unit_Of_Competency_ID],[Prerequisite_ID])
        SELECT DISTINCT(Pre_Pathway),(Select Unit_Of_Competency_ID from Unit_Of_Competency where UoC_Code like stg.Pre_UoC_Code),(Select Unit_Of_Competency_ID as Prerequisite_ID from Unit_Of_Competency where UoC_Code like stg.Pre_UoC_PreReq) FROM LoadUnitsStg stg
            WHERE Pre_Pathway IS NOT NULL AND NOT EXISTS (
                SELECT 1 FROM Prerequisite Pre
                    WHERE Pre.Pathway=stg.Pre_Pathway);

    INSERT INTO Prerequisite_Ancestor ([Ancestor_Level],[UoC_ID],[Prerequisite_ID])
        SELECT DISTINCT(Ancestor_level),(Select Unit_Of_Competency_ID as UoC_ID from Unit_Of_Competency where UoC_Code like stg.Anc_UoC_Code),(Select Unit_Of_Competency_ID as Prerequisite_ID from Unit_Of_Competency where UoC_Code like stg.Anc_UoC_PreReq) FROM LoadUnitsStg stg
            WHERE Ancestor_level IS NOT NULL AND NOT EXISTS (
                SELECT 1 FROM Prerequisite_Ancestor Anc
                    WHERE Anc.Ancestor_level=stg.Ancestor_level);

После загрузки данных просто обрежьте промежуточную таблицу для следующего набора записей.

Надеюсь, это поможет вам.

...