laozhou88 2009-02-16 21:07
浏览 218
已采纳

求教一个SQL语句

表结构如下:
id name parentid
1001 仓库一 0
1002 仓库二 0
1003 柜台一 1001
1004 柜台二 1002
1005 第三排 1003
输入 id=1005 我想要的查询结果:
仓库一#柜台一 #第三排
使用sql语句应该怎么写
[b]问题补充:[/b]
不能限定几层,比如说:sun201200204的答案他就是限定为三层了,改问题的层数是不知道的

  • 写回答

7条回答 默认 最新

  • xieye114 2009-02-16 22:07
    关注

    这是个常见问题啊,

    一般来说不能用一条sql解决,改表后可用一条sql解决

    解决办法视情况而定,假如你知道最多父节点只有4、5级,也就是级别不多的情况下,那么用程序语言如PHP,java递归(这种情况还要细分,如果表记录不多的话,可以一次读入整张表,否则多次读,读一次查一次)

    假如级别很多,比如有十多级,则你应该给表加冗余字段来解决,可以做到用一条sql来解决,缺点是删除记录时要小心,增加记录也要小心。
    加冗余字段又有几种方法,有一种是加左右节点的,请查看数据结构的资料,
    还有一种容易理解,加2个字段,分别是级别和位置字段。

    表结构如下:
    id name parentid level location(字符串类型)
    1001 仓库一 0 1 1001
    1002 仓库二 0 1 1002
    1003 柜台一 1001 2 10011003
    1004 柜台二 1002 2 10021004
    1005 第三排 1003 3 100110031005
    是不是很简单,实际上parentid就是多余字段了,可以不要了。
    当然查名字还要查一下,总之不递归了。查两次。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?

悬赏问题

  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用