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语句不是很熟悉,只能想到这个办法,如有高手请支招!
SQL Server 上关于同一张表里的三级联动的更多相关文章
- (转)SQL Server上的一个奇怪的Deadlock及其分析方法
原文地址:http://blogs.msdn.com/b/apgcdsd/archive/2012/02/28/sql-server-deadlock.aspx 最近遇到了一个看上去很奇怪,分析起来很 ...
- SQL Server上唯一的数据库集群:负载均衡、读写分离、容灾(数据零丢失、服务高可用)
SQL Server上唯一的数据库集群:负载均衡.读写分离.容灾(数据零丢失.服务高可用).审计.优化,全面解决数据库用户问题.一键安装,易用稳定,性价比高,下载链接:http://www.zheti ...
- SQL Server上DBLINK的创建,其实很简单!(上)
今天给大家来分享一下跨服务器操作数据库,还是以SQL Server的管理工具(SSMS)为平台进行操作. 什么是跨服务器操作? 跨服务器操作就是可以在本地连接到远程服务器上的数据库,可以在对方的数据库 ...
- 通过t-sql定期自动备份SQL Server 上的所有数据库
项目背景 解决方案 方案一,是采用SQL的定时备份,建立作业来操作,这里有完整的使用手册: 方案二:基于t-sql方法进行查询备份 方案思路: 1.1 在 Master 数据库上创建一个备份所有数据库 ...
- 查看SQL语句在SQL Server上的执行时间
set statistics profile onset statistics io onset statistics time ongo--begin <这里写上你的语句...> se ...
- SQL Server快速查询某张表的当前行数
传统做法可能是select count(1) 但是往往会比较慢.推荐如下做法: ) CurrentRowCount FROM sys.sysindexes WHERE id = OBJECT_ID(' ...
- mssql sql server上如何建一个只读视图–视图锁定的另类解决方案
转自:http://www.maomao365.com/?p=4508 <span style="color:red;font-weight:bold;">我们熟知一个 ...
- SQL SERVER查询字段在哪个表里
); SET @ColumnName='字段名的模糊匹配'; SELECT 表名=D.NAME, 表说明 THEN ISNULL(F.VALUE, ' ') ELSE ' ' END, 字段序号 = ...
- Oracle Oracle数据库 迁移到 SQL Server上
原地址:https://blog.csdn.net/LongtengGensSupreme/article/details/81355181
随机推荐
- 使用ansible对远程主机上的ssh公钥进行批量分发
使用ansible对远程主机上的ssh公钥进行批量分发或者是删除修改操作 ansible内置了一个authorized_key模块,这个模块很好用,我们使用这个模块可以对远程 主机上的ssh公钥进行批 ...
- Web API DataContract DataMember Serializable简单解释
首先看一下DataContract这个类契约: Web API/WCF 中类一旦标记了DataContract 属性,那么类中的属性只有被标记为DataMember属性才会被序列化,也就是说一个类的属 ...
- Java GC基础
Java的垃圾回收机制负责回收无用对象占据的内存资源,但是有特殊情况:假定对象不是使用new关键字获得了一块儿“特殊”的内存区域,
- 什么是极坐标? —— 一点微小的想法 What is Polar Coordinate ? - Some Naive Thoughts about It
Can you answer these three questions? The answer seems to be trivial, since we can use our eyes to o ...
- P2955 [USACO09OCT]奇数偶数Even? Odd?
题目描述 Bessie's cruel second grade teacher has assigned a list of N (1 <= N <= 100) positive int ...
- 【C#】枚举
枚举 public static class CommonEnums { public enum people { /// <summary> ///男人 /// </summary ...
- 11.1Java-接口
一.接口 interface定义:固定格式 public abstract 返回值类型 方法名字(参数列表);代码: public interface AMyInterface { public ab ...
- fsck和badlocks
fsck可以检查好几种不同的文件系统,fsck只是一个中和程序而已,个别的文件系统检查程序都在/sbin中,可以使用ls -l /sbin/fsck* -A 按照/etc/fstab的内容,将所有的设 ...
- configure: error: The LBL Packet Capture Library, libpcap, was not found!
configure: error: The LBL Packet Capture Library, libpcap, was not found! yum install libpcap*
- js里面Object的一些方法
1.Object.freeze() 阻止修改现有属性的特性和值,并阻止添加新属性两种用法:Object.freeze( { } ) 和 Object.freeze( object ) <scri ...