zoukankan      html  css  js  c++  java
  • SQL Server 上关于同一张表里的三级联动

    或许这并不能叫做三级联动,三级联动是很容易实现的东西,有明确的层级关系,一般分开三张表存储。我在公司的项目里遇到这样一个问题,同一张表里面,有分公司,客户,项目3种关系,他们的层级关系是这样:分公司-客户-项目。也就是说,分公司下有多个客户,每个客户下又有多个项目,但是他们保存在了同一张表,用一个父级ID的字段保存他们之间的关系,比如说项目的父级ID是2,那么他就是ID为2的客户的项目。具体请看下表:

     
    MID   MCType Name FatherID
    2 分公司 分公司一 NULL
    9 客户 客户一 2
    18 项目 项目一 9
    20 客户 客户二 2
    22 客户 客户三 23
    23 分公司 分公司二 NULL                                                                                 

    关系很明确。至于为什么数据库的表设计成这个样子,不要问我,公司老大设计的……

    现在我要从这张表里获取“分公司一”下面的客户和项目,注意,是同时获取客户和项目,两种数据都要。换个角度说,就是提出分公司不为“分公司一”的所有记录,取剩下的。原本觉得很麻烦的,想全部拿出来再在C#里筛选,可是后来一想,这张表的数据量太大了,这样做不现实,还是用一个sql语句查出来就好了。于是想了好久好久,想到这个方法:

    先取出“分公司一”的客户ID,然后左右两边分别连接,取出两张表,再合并起来,性能没测试……赶脚好垃圾的样子……

    select tt.* From (select XFJPlaceMark.* from (select MID from XFJPlaceMark where FatherID={0}) as t,XFJPlaceMark where XFJPlaceMark.MID=t.MID UNION select XFJPlaceMark.* from (select MID from XFJPlaceMark where FatherID={0}) as t,XFJPlaceMark where XFJPlaceMark.FatherID=t.MID as tt

    里面的{0}就是你要写的参数,填分公司的ID,在这张表里就是“2”。

    本人sql语句不是很熟悉,只能想到这个办法,如有高手请支招!

  • 相关阅读:
    shopping car 1.0
    文件分类
    求1-100的所有数的和
    输出 1-100 内的所有奇数和
    求1-2+3-4+5 ... 99的所有数的和
    关闭提示的下拉框
    h5页面乱码-设置编码
    常用的css
    渲染后新元素没有绑定事件
    爬虫日记-关于一些动态爬取
  • 原文地址:https://www.cnblogs.com/rainlam163/p/3319860.html
Copyright © 2011-2022 走看看