oracle递归查询发票循环开
时间: 2023-07-22 22:37:54 浏览: 77
Oracle递归查询
如果你想查询 Oracle 数据库中发票循环开的情况,可以使用递归查询来实现。递归查询是一种自引用查询,可以在查询过程中多次引用同一个表或视图。
以下是一个示例查询,可以帮助你理解如何使用递归查询来查找发票循环开的情况:
```
WITH invoice_tree (invoice_no, parent_invoice_no, level) AS (
SELECT invoice_no, parent_invoice_no, 1
FROM invoice
WHERE parent_invoice_no IS NULL
UNION ALL
SELECT i.invoice_no, i.parent_invoice_no, it.level + 1
FROM invoice i
JOIN invoice_tree it ON i.parent_invoice_no = it.invoice_no
)
SELECT *
FROM invoice_tree
WHERE level > 1
```
这个查询使用了一个公共表表达式 (CTE),名为 `invoice_tree`。在第一个查询中,我们选择了所有没有父发票的发票(也就是根发票)。在第二个查询中,我们将 `invoice_tree` 与 `invoice` 表连接,找出所有子发票,并将它们添加到 `invoice_tree` 中。这个过程将一直重复,直到所有发票都被包含在 `invoice_tree` 中。
最后,我们选择所有 `level` 大于 1 的记录,这表示这些发票是循环开的。你可以根据自己的需要修改这个查询,以适应你的数据表结构和查询需求。
阅读全文