SQL - Копировать столбец в другую таблицу // Найти семейное отношение в дереве - PullRequest
0 голосов
/ 03 октября 2018

В настоящее время я пытаюсь создать таблицу хранилища (или найти альтернативное решение), чтобы позволить мне легко идентифицировать "семейные" отношения между некоторыми элементами.

Это в основном древовидная структура с несколькими элементами, связанными друг с другом в базе данных Oracle SQL.

Каждый элемент имеет хотя бы одного родителя, и все они идентифицируются кодом.Родительский код одного элемента легко доступен в таблице.

Я пытался скопировать столбец «код» в пустую таблицу репозитория, используя следующий код:

UPDATE TARGET_TABLE 
SET TARGET_TABLE.CODE1 =
(SELECT CODE1 FROM SOURCE_TABLE)


INSERT INTO TARGET_TABLE (CODE1)
SELECT CODE1 FROM SOURCE_TABLE;

У меня нет ошибок при выполнении этого запроса, но в целевой таблице ничего не происходит .. "0 строка обновлена"

Я пытался сделать это без создания новой таблицы, и я могучтобы найти код с помощью следующих команд:

SELECT DAD_CODE1 FROM SOURCE_TABLE where 'CODE=1000' IN CODE; -- give 0900 as result, being the dad of 1000
SELECT DAD_CODE1 FROM SOURCE_TABLE where 'CODE=0900' IN CODE; -- give null if root

и т. д. до получения значения NULL, когда я достигну корня.

или наоборот:

SELECT CODE FROM SOURCE_TABLE WHERE '00001' IN DAD_CODE1 -- give 0100, among other children codes of this dad element 
SELECT CODE FROM SOURCE_TABLE WHERE '00100' IN DAD_CODE1 -- give null if no children

и это работает, но я не могу построить это "рекурсивно".Цель состоит в том, чтобы легко найти отношения для другой обработки данных.

1 Ответ

0 голосов
/ 03 октября 2018

Оператор UPDATE будет обновлять только те строки, которые уже существуют, поэтому, если TARGET_TABLE пуст, вы должны получить "0 строк обновлено", так как обновлять нечего.

Оператор INSERT будет вставлен какмного строк в TARGET_TABLE, как в SOURCE_TABLE.

Вы можете убедиться в этом сами, посмотрев на эту dbfiddle

Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...