遍历指针字段的MySQL查询

遍历指针字段的MySQL查询,mysql,Mysql,由于一些遗留代码,我有两个MySQL表,其结构如下(简化): 显然,每张发票都有许多InvoiceItems 旧版应用程序希望您首先加载发票行,然后使用发票的第一个项目值从InvoiceItem表加载第一个项目。要获取每个连续的InvoiceItem行,您将跟随其下一个\u项值,直到找到空值 是否有一种编写MySQL SQL的方法可以为给定发票返回所有InvoiceItem?i、 跟踪发票的第一个项目,然后遍历所有发票项目的下一个项目指针 谢谢 Bill.您希望执行递归查询,但mysql

由于一些遗留代码,我有两个MySQL表,其结构如下(简化):

显然,每张发票都有许多InvoiceItems

旧版应用程序希望您首先加载发票行,然后使用发票的第一个项目值从InvoiceItem表加载第一个项目。要获取每个连续的InvoiceItem行,您将跟随其下一个\u项值,直到找到空值

是否有一种编写MySQL SQL的方法可以为给定发票返回所有InvoiceItem?i、 跟踪发票的第一个项目,然后遍历所有发票项目的下一个项目指针

谢谢
Bill.

您希望执行递归查询,但mysql<8不支持它

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

仅当项目的每个发票id按升序排列时,此解决方案才有效

此解决方案的灵感来自

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


嗯,这是一个奇怪的配置。基本上你有一个LinkedList。我不确定一个查询是否对你有帮助。如果我是你,我会制作一个透视表并进行一对多查询。你使用的是哪个版本的MySQL?还有,如果是旧的,你能用新的吗?@草莓:我用的是5.2.2,但升级不是问题。升级。在版本8+中,这个问题更为简单。您能创建一个吗?非常感谢这个解决方案。非常感谢。它起作用了!
Invoice (ID, InvoiceNo, First_Item)

InvoiceItem (ID, Details, Next_Item)
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))) ;