作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
由于一些遗留代码,我有 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,因为您将很快没有安全更新。
关于遍历指针字段的MySQL Query,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58433768/
我是一名优秀的程序员,十分优秀!