Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在Netezza中使用自连接查找父记录_Sql_Join_Self_Netezza - Fatal编程技术网

Sql 如何在Netezza中使用自连接查找父记录

Sql 如何在Netezza中使用自连接查找父记录,sql,join,self,netezza,Sql,Join,Self,Netezza,我有一个表,表中的键(即数字)是org_键和par_org_键 Org_key | Par_Org_key 52 26 23 89 26 14 14 8 我的问题是,如何使用Netezza SQL执行相同的查询?Netezza不支持递归公共表表达式,否则这将是更优雅和可扩展的解决方案。我发现最好的解决方法是对同一个表使用左外部联接 创建一个测试表。我们使用-1表示根节点 CREATE TABLE t1 AS SELECT 52 AS Org_key, 26

我有一个表,表中的键(即数字)是org_键和par_org_键

Org_key | Par_Org_key 52 26 23 89 26 14 14 8
我的问题是,如何使用Netezza SQL执行相同的查询?

Netezza不支持递归公共表表达式,否则这将是更优雅和可扩展的解决方案。我发现最好的解决方法是对同一个表使用左外部联接

创建一个测试表。我们使用-1表示根节点

CREATE TABLE t1 AS
SELECT 52 AS Org_key, 26 AS Par_Org_key
UNION
SELECT 23 AS Org_key, 89 AS Par_Org_key
UNION
SELECT 26 AS Org_key, 14 AS Par_Org_key
UNION
SELECT 14 AS Org_key, 8 AS Par_Org_key
UNION
SELECT 8 AS Org_key, -1 AS Par_Org_key;
这将返回8 | 14 | 26 | 52

SELECT NVL(a.Org_key,'0') || '|' || NVL(b.Org_key,'0') || '|' || NVL(c.Org_key,'0') || '|' || NVL(d.Org_key,'0')
FROM t1 a
LEFT OUTER JOIN t1 b ON a.Org_key = b.Par_Org_key
LEFT OUTER JOIN t1 c ON b.Org_key = c.Par_Org_key
LEFT OUTER JOIN t1 d ON c.Org_key = d.Par_Org_key
LEFT OUTER JOIN t1 e ON d.Org_key = e.Par_Org_key
WHERE a.Par_Org_key = -1;
如果要添加更多的左外部联接以支持未知数量的级别,这有助于处理由此产生的空值

SELECT NVL(CAST(a.Org_key AS VARCHAR(10)),'') || '|' || NVL(CAST(b.Org_key AS VARCHAR(10)),'') || '|' || NVL(CAST(c.Org_key AS VARCHAR(10)),'') || '|' || NVL(CAST(d.Org_key AS VARCHAR(10)),'')

Netezza不支持递归公共表表达式,否则这将是更优雅和可扩展的解决方案。我发现最好的解决方法是对同一个表使用左外部联接

创建一个测试表。我们使用-1表示根节点

CREATE TABLE t1 AS
SELECT 52 AS Org_key, 26 AS Par_Org_key
UNION
SELECT 23 AS Org_key, 89 AS Par_Org_key
UNION
SELECT 26 AS Org_key, 14 AS Par_Org_key
UNION
SELECT 14 AS Org_key, 8 AS Par_Org_key
UNION
SELECT 8 AS Org_key, -1 AS Par_Org_key;
这将返回8 | 14 | 26 | 52

SELECT NVL(a.Org_key,'0') || '|' || NVL(b.Org_key,'0') || '|' || NVL(c.Org_key,'0') || '|' || NVL(d.Org_key,'0')
FROM t1 a
LEFT OUTER JOIN t1 b ON a.Org_key = b.Par_Org_key
LEFT OUTER JOIN t1 c ON b.Org_key = c.Par_Org_key
LEFT OUTER JOIN t1 d ON c.Org_key = d.Par_Org_key
LEFT OUTER JOIN t1 e ON d.Org_key = e.Par_Org_key
WHERE a.Par_Org_key = -1;
如果要添加更多的左外部联接以支持未知数量的级别,这有助于处理由此产生的空值

SELECT NVL(CAST(a.Org_key AS VARCHAR(10)),'') || '|' || NVL(CAST(b.Org_key AS VARCHAR(10)),'') || '|' || NVL(CAST(c.Org_key AS VARCHAR(10)),'') || '|' || NVL(CAST(d.Org_key AS VARCHAR(10)),'')

Netezza在这里是一个相当模糊的话题。在Netezza上问这个问题可能会更幸运,这是一个相当模糊的话题。问这个问题你可能会运气更好