SQL-复制另一个表中的列//在树中查找家庭关系

时间:2018-10-03 14:27:11

标签: sql oracle

我目前正在尝试建立存储库表(或找到替代解决方案),以使我能够轻松识别某些元素之间的“家族”关系。

它基本上是一个树结构,在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 :(得分:2)

UPDATE语句将仅更新已经存在的行,因此,如果TARGET_TABLE为空,则您将得到“ 0行已更新”,因为没有要更新的内容。

INSERT语句将在TARGET_TABLE中插入与SOURCE_TABLE中的行一样多的行。

You can see this for yourself by looking at this dbfiddle

好运。