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
随机推荐
- Codeforces Round #405 (rated, Div. 2, based on VK Cup 2017 Round 1) D
Description A tree is an undirected connected graph without cycles. The distance between two vertice ...
- SqlParameter 操作 image 字段
public static void AddEmployee( string lastName, string firstName, string title, DateTime hireDate, ...
- C# 对象复制
/// <summary> /// 把DataTable对象转成List<T>对象 /// </summary> /// <typeparam name=&q ...
- AJPFX浅谈Java新手问题之缺少良好的编程习惯
★随意地命名 有些新手写程序,当需要定义某个变量名(也可能是函数名.类名.包名等)时,随意地一敲键盘,名字就起好了......若干星期后,碰到某 bug,再来看自己写的代码时,心中暗自嘀咕:“这代码是 ...
- 【js数据结构】图的深度优先搜索与广度优先搜索
图类的构建 function Graph(v) {this.vertices = v;this.edges = 0;this.adj = []; for (var i = 0; i < this ...
- 浅析 innerHTML 性能优化的原理
浅析 innerHTML 性能优化的原理 博客分类: web前端 IEAndroidwebkit浏览器UI 昨天看了 lveyo老兄的"innerHTML的性能问题" 一文 ht ...
- Web服务器安全设置
Web服务器安全方面一直重视程度不够,是各种网站经常被黑的主要原因.下面笔者总结了一下关于怎样保证Web服务器安全的措施,希望能给那些服务器尚存在漏洞的用户提供一些帮助. 本文主要以Windows s ...
- qt sql多重条件查询简便方法
转载请注明出处:http://www.cnblogs.com/dachen408/p/7457312.html 程序设计过程中,经常要涉及到查询,并且有很多条件,且条件可为空,如果逐个判断,会有很多情 ...
- MongoDB最简单的入门教程之四:使用Spring Boot操作MongoDB
Spring Boot 是一个轻量级框架,可以完成基于 Spring 的应用程序的大部分配置工作.Spring Boot的目的是提供一组工具,以便快速构建容易配置的Spring应用程序,省去大量传统S ...
- C语言常用关键字及运算符操作---关键字
每个知识点4问: 1. 是什么? 2. 什么时间用? 3. 怎么用? 4.为什么这么用? 1. 32个关键字 //(1)sizeof 的用法 //sizeof 是关键字,让编译器帮我们查看内存空间存储 ...