gpt4 book ai didi

遍历指针字段的MySQL Query

转载 作者:行者123 更新时间:2023-11-30 21:26:56 25 4
gpt4 key购买 nike

由于一些遗留代码,我有 2 个具有以下结构(简化)的 MySQL 表:

Invoice (ID, InvoiceNo, First_Item)

InvoiceItem (ID, Details, Next_Item)

很明显,每个发票都有很多发票项目。

旧应用程序希望您首先加载发票行,然后使用发票的 First_Item 值从 InvoiceItem 表加载第一项。要获取每个连续的 InvoiceItem 行,您将跟踪其 Next_Item 值,直到遇到空值。

有没有一种方法可以编写 MySQL SQL 来返回给定发票的所有 InvoiceItem?即跟随 Invoice 的 First_Item,然后遍历所有 Invoice_Items 的 Next_Item 指针。

谢谢比尔。

最佳答案

您想做一个递归查询,但是 mysql<8 不支持它。

这是一个适用于小型数据集的解决方案(来自 sqlfiddle)

select  id,
details ,
next_item
from (select * from invoiceitem
order by id ) inv_itm,
(select @iis := 0 ) init
where find_in_set(id, @iis)
and not find_in_set(9999999999, @iis)
and length(@iis := concat(@iis, ',', ifnull(next_item,9999999999))) ;

此解决方案仅在项目的每个发票 ID 都按升序排列时才有效。

此解决方案的灵感来自 How to create a MySQL hierarchical recursive query

您需要计划升级到 5.7 或 8.0,因为您将很快没有安全更新。

参见 https://en.wikipedia.org/wiki/MySQL#Release_history

关于遍历指针字段的MySQL Query,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58433768/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com