sql 问题 一条sql进行查询拼接

有一张表 a 字段如下
id content sid。
sid 是 id 的外键,content 是内容。
当要存储比较长的内容时,先将字符串按照特定的长度切割,然后在进行sql存储,
类似链表,例如需要存储字符串str,先将str拆成字符串 a,b,然后将a,b进行
存储 如下图所示,只需记录a的id就可以,
图片说明
当需要str字符串时,根据记录的id查到a的信息,然后判断sid是否为空或者是否等于自身
的id,不等于就取 sid 接着查,最后拼接成最终的字符串。

            现在的问题是: 我只想写一条sql进行查询拼接

SELECT CONCAT(t1.content,t2.content) content from test.test t1
LEFT JOIN test.test t2 on t1.sid = t2.id where t1.id <> t1.sid and t1.sid is not NULL
这个sql可以实现,直接查询出 ‘ab’
结果如图:
图片说明
图片说明

写成函数吧。。。你这要求真是鸡蛋里挑骨头,人家做数据查询的你非要做个递归

  1. 至少加一个rootId的字段,用来标记哪些是同一组。
  2. id或sId如果有序,用group_concat连接起来就行,如果无序,应该没办法用一条sql搞定

Mysql数据库,单表字段可以达到2万左右,具体记不清了,反正很达,其次的是百度下,工作处理流程,可以学习这个的处理方式。把一段数据切割,切割的几份存储,把顺序也存下,之后,生成记录,查询的时候,可以轻松查。
或者是生成json,xml,word等文件的形式去存储。这样好点,起码大于10m的文字需要这样,至于少的就分段存库,也是可以的

如果是查分成3条数据或是以上的话,这个sql是不行的。如 liuade 这个人说的,需要增加一个字段标识是同一个str 拆分的,或者 sid 直接就存一样的数值,标识是同一个str。
如图:图片说明
然后直接:
SELECT GROUP_CONCAT(content) content from test.test where sid = 1
然后代码中 通过 Str.replace(',', '') 去除掉GROUP_CONCAT的逗号

添加列不好吗?,不一定是要添加行的方向切割呀

SELECT content from a WHERE sid>=id

然后在业务中遍历拼接好就行了