Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.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语句中查找基于引用文档编号的相关记录ID_Sql_.net_Postgresql_Relationship - Fatal编程技术网

如何在SQL语句中查找基于引用文档编号的相关记录ID

如何在SQL语句中查找基于引用文档编号的相关记录ID,sql,.net,postgresql,relationship,Sql,.net,Postgresql,Relationship,我需要在同一个表中显示相关的基于记录id的文档编号作为参考。我尝试了很多时间和方向,但无法获得正确的输出 下表和数据如下: 基本上,记录ID号2、4和10是基于参考文档号关联的。例如,如果我选择记录ID号4,我仍然可以列出从第一笔交易到最后一笔交易的所有相关文档 我希望有人能解决这个问题,或者任何人都能从SQL语句或.net编码中找到解决方案,只要我能显示这个结果。是否要链接父文档上的所有文档?如果您想要,假设XY001是父文档,那么就说获取一个文档并查找docno XY001的所有相关文档,

我需要在同一个表中显示相关的基于记录id的文档编号作为参考。我尝试了很多时间和方向,但无法获得正确的输出

下表和数据如下:

基本上,记录ID号2、4和10是基于参考文档号关联的。例如,如果我选择记录ID号4,我仍然可以列出从第一笔交易到最后一笔交易的所有相关文档


我希望有人能解决这个问题,或者任何人都能从SQL语句或.net编码中找到解决方案,只要我能显示这个结果。

是否要链接父文档上的所有文档?如果您想要,假设XY001是父文档,那么就说获取一个文档并查找docno XY001的所有相关文档,否则以另一种方式链接 你可以用

SELECT *
FROM TableA AS parentDoc
LEFT OUTER JOIN TableA AS referentialDoc ON parentDoc.docno = referentialDoc.refdocno
WHERE parentDoc.docno = XY001
当然,您可以将WHERE子句更改为

WHERE referentialDoc.docno IS NOT NULL 
仅显示具有引用文档的文档


还要注意,这只适用于父-子结构。对于祖父母子女的结构等,您需要展开查询或以编程方式进行查询。

是否要链接父文档上的所有文档?如果您想要,假设XY001是父文档,那么就说获取一个文档并查找docno XY001的所有相关文档,否则以另一种方式链接 你可以用

SELECT *
FROM TableA AS parentDoc
LEFT OUTER JOIN TableA AS referentialDoc ON parentDoc.docno = referentialDoc.refdocno
WHERE parentDoc.docno = XY001
当然,您可以将WHERE子句更改为

WHERE referentialDoc.docno IS NOT NULL 
仅显示具有引用文档的文档


还要注意,这只适用于父-子结构。对于祖父母子女的结构等,您需要展开查询或以编程方式进行查询。

我假设您使用的是postgres,因为它带有标签。您可以进行递归查询,以在查询给定文档号时实现所需的功能:

WITH RECURSIVE t AS (
    SELECT docno, refdocno
    FROM <table>
    WHERE docno = 'T0003'

    UNION

    SELECT blah.docno, blah.refdocno
    FROM <table>
    JOIN t ON t.docno    = blah.refdocno
           OR t.refdocno = blah.docno
)
SELECT *
  FROM t;
注意:您必须在with语句中输入要搜索的文档号。如果您需要其他列,也可以将它们放在那里


另外,我假设在您的示例中,第10行的refdocno应该是T0003

我假设您使用的是postgres,因为它带有标签。您可以进行递归查询,以在查询给定文档号时实现所需的功能:

WITH RECURSIVE t AS (
    SELECT docno, refdocno
    FROM <table>
    WHERE docno = 'T0003'

    UNION

    SELECT blah.docno, blah.refdocno
    FROM <table>
    JOIN t ON t.docno    = blah.refdocno
           OR t.refdocno = blah.docno
)
SELECT *
  FROM t;
注意:您必须在with语句中输入要搜索的文档号。如果您需要其他列,也可以将它们放在那里


另外,我假设在您的示例中,第10行的refdocno应该是T0003

在尝试Ramfjord解决方案后,我得到了我想要的结果。我只需添加一点触控即可对结果进行排序,这样我就可以看到从第一笔到最后一笔交易,如下所示:

WITH RECURSIVE t AS (
SELECT **recid**, docno, refdocno
FROM <table>
WHERE docno = 'T0003'

UNION

SELECT **c.recid**, docno, refdocno
FROM <table> c
JOIN t ON t.docno = c.refdocno
       OR t.refdocno = c.docno
)
SELECT *
    FROM t **order by recid**;
拉姆峡湾你已经救了我一天


您的解决方案也适用于父子表。我将使用您的解决方案执行其他任务。

尝试Ramfjord解决方案后,我得到了我想要的结果。我只需添加一点触控即可对结果进行排序,这样我就可以看到从第一笔到最后一笔交易,如下所示:

WITH RECURSIVE t AS (
SELECT **recid**, docno, refdocno
FROM <table>
WHERE docno = 'T0003'

UNION

SELECT **c.recid**, docno, refdocno
FROM <table> c
JOIN t ON t.docno = c.refdocno
       OR t.refdocno = c.docno
)
SELECT *
    FROM t **order by recid**;
拉姆峡湾你已经救了我一天


您的解决方案也适用于父子表。我将使用您的解决方案完成其他任务。

您好,非常感谢您和Ramfjord告诉我应该做什么,并向你们两位学习。我想把我的标题改为如何在同一个表中找到基于记录ID的参考文档号。也许在这之后。另外,我假设第10行的refdocno应该是T0003,在你的例子中,你是正确的拉姆峡湾,我在图片上的错误,我附上。很抱歉我会尝试两种解决方案,从你的家伙,让你知道结果。无论如何,感谢您抽出时间展示解决方案和解释。非常感谢你们。你好,非常感谢你们告诉我我应该做什么,并向你们两位学习。我想把我的标题改为如何在同一个表中找到基于记录ID的参考文档号。也许在这之后。另外,我假设第10行的refdocno应该是T0003,在你的例子中,你是正确的拉姆峡湾,我在图片上的错误,我附上。很抱歉我会尝试两种解决方案,从你的家伙,让你知道结果。无论如何,感谢您抽出时间展示解决方案和解释。非常感谢你。