Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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)属性匹配的所有记录_Sql_Postgresql - Fatal编程技术网

查找与自关联(SQL)属性匹配的所有记录

查找与自关联(SQL)属性匹配的所有记录,sql,postgresql,Sql,Postgresql,我有以下型号 Shipment (id, product_id, ...) Product (id, product_id, some_attribute:boolean, ...) 一批货物属于一个产品,而一个产品有多批货物。此外,通过自引用(product\u id),一个产品可以是另一个产品的子产品 我想查找在自我参考链顶部的产品上的some\u属性为真的所有装运 比如说这个例子, shipment1 (id = 1, product_id = 1) shipment2 (id = 2,

我有以下型号

Shipment (id, product_id, ...)
Product (id, product_id, some_attribute:boolean, ...)
一批货物属于一个产品,而一个产品有多批货物。此外,通过自引用(
product\u id
),一个产品可以是另一个产品的子产品

我想查找在自我参考链顶部的产品上的
some\u属性
为真的所有装运

比如说这个例子,

shipment1 (id = 1, product_id = 1)
shipment2 (id = 2, product_id = 2)

product1 (id = 1, product_id = 3, some_attribute = false)
product2 (id = 2, product_id = 4, some_attribute = false)
product3 (id = 3, product_id = null, some_attribute = false)
product4 (id = 4, product_id = null, some_attribute = true)
只应返回
shipment2
,因为它的产品线类似于
p2->p4
,其中
某些属性对于
p4
为真

非常感谢

编辑:


为清楚起见,产品链可以任意长,但在实践中,通常是2-3个链接

我假设您的参考链可以比示例中的更长,对吗?是的,它可以是任意长度,但在实践中,通常是2-3个链接。我认为您需要使用CTEs的递归版本来探索
:是的,我看过了,但无法使其工作,如果您能提供一个示例,那将是greatI,我从未使用过它。我之前评论中的第一个链接有一些例子。如果你把你的尝试添加到你的问题文本中,我会看看我是否能帮上忙。