永发信息网

求一句SQL语句。

答案:5  悬赏:0  手机版
解决时间 2021-01-03 09:59
有三张表,用户表(Users),部门表(Dep)和客户表(Cust)。
客户表有UserID关联Users表中的ID主键,表示这个客户属于这个用户的。
用户表有DepID关联Dep表中的ID主键,表示这个用户是这个部门的。
部门表有UpID关联同一个表中的主键,表示这个部门的上级部门。
现在想查出这个用户所在部门的人员的所有客户,求SQL语句。在线等待,万分感谢!

不光是这个用户当前部门的客户,包括他们的下级部门也要查询出来。
最佳答案
-- 用户表
-- 用户表有DepID关联Dep表中的ID主键,表示这个用户是这个部门的。
CREATE TABLE t_Users (
UserID INT PRIMARY KEY,
DepID INT,
UserNAME VARCHAr(10)
)
GO

-- 部门表
-- 部门表有UpID关联同一个表中的主键,表示这个部门的上级部门。
CREATE TABLE t_Dep (
DepID INT PRIMARY KEY,
UpID INT,
DepNAME VARCHAr(10)
)
GO

-- 客户表
-- 客户表有UserID关联Users表中的ID主键,表示这个客户属于这个用户的。
CREATE TABLE t_Cust (
CustID INT PRIMARY KEY,
UserID INT,
CustName VARCHAr(10)
)
GO

INSERT INTO t_Dep
SELECt 1, NULL, '顶级部门' UNIOn ALL
SELECT 2, 1, '2级部门1' UNIOn ALL
SELECT 3, 1, '2级部门2' UNIOn ALL
SELECT 4, 2, '3级部门1' UNIOn ALL
SELECT 5, 2, '3级部门2'
GO

INSERT INTO t_Users
SELECT 1, 1, '顶级员工' UNIOn ALL
SELECT 2, 2, '2级员工1' UNIOn ALL
SELECT 3, 2, '2级员工2' UNIOn ALL
SELECT 4, 3, '2级员工3' UNIOn ALL
SELECT 5, 3, '2级员工4' UNIOn ALL
SELECT 6, 4, '3级员工1' UNIOn ALL
SELECT 7, 4, '3级员工2'
GO

INSERT INTO t_Cust
SELECT 1, 1, '顶级客户' UNIOn ALL
SELECT 2, 2, '2级客户1' UNIOn ALL
SELECT 3, 3, '2级客户2' UNIOn ALL
SELECT 4, 4, '2级客户3' UNIOn ALL
SELECT 5, 5, '2级客户4' UNIOn ALL
SELECT 6, 6, '3级客户1' UNIOn ALL
SELECT 7, 7, '3级客户2'
GO

WITH
dep_cus_cte
AS(
SELECT
t_Dep.DepID,
t_Dep.UpID,
t_Cust.CustName
FROM
t_Dep
JOIN t_Users
ON (t_Dep.DepID = t_Users.DepID)
JOIN t_Cust
ON (t_Users.UserID = t_Cust.UserID)
) ,
tree_cte
AS (
SELECt
DepID,
CustName
FROM
dep_cus_cte
WHERe
DepID IN (SELECt DepID FROM t_Users t WHERe t.UserNAME = '顶级员工' )
UNIOn ALL
SELECt
dep_cus_cte.DepID,
dep_cus_cte.CustName
FROM
tree_cte
JOIN dep_cus_cte
ON (tree_cte.DepID = dep_cus_cte.UpID)
)
SELECt CustName FROM tree_cte;

CustName
----------
顶级客户
2级客户1
2级客户2
2级客户3
2级客户4
3级客户1
3级客户2
3级客户1
3级客户2

假如那个参数 顶级员工 修改为 2级员工1
结果为:
CustName
----------
2级客户1
2级客户2
3级客户1
3级客户2
3级客户1
3级客户2

(6 行受影响)
全部回答
SELECt * FROM CUST WHERe USERID IN (SELECt USERID FROM USERS A WHERe EXISTS (SELECt 1 FROM USERS B WHERe B.DEPID = A.DEPID AND B.USERID = '用户编号')) 这个语句就会查询出结果了。 IN后边查询的是这个用户所在部门的所有用户。
select * from 客户表 where 客户表.userID in (select 用户表.userID from 用户表 where 用户表.DepID in (select 部门表.DepID from 部门表 where 部门表.depId = (select 用户表.depID from 用户表 where 用户表.用户名='这个用户')))
其实照你上面描述,不用部门表(Dep)这个表 select * from Cust where UserID in (select a.ID from Users a,Users B where a.DepID=b.DepID and b.ID= '用户编号') --选出这个部门的所有人员的ID号。 【有疑问可以HI我,或追问,但请不要关闭问题,谢谢!】

正确

以这句select distinct depnum from user where uid=any(select distinct userid from book)

比如 user 表有数据 (uid,depnum){(1,'aa'),(3,'bb'),(2,'cc')}这样三个数据

book id{1,2,1,}这个三个数据,select distinct userid from book取出的数据就是1,2

any表示只要有uid与之进行比较一个相同就取出 结果(1,'aa')(2,'cc')

以此类推得到最后结果

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
罗龙工商所在什么地方啊,我要处理点事
奥迪a6l怎么进入mml设置
“校园歌手大赛”用英语怎么说如题
列式计算.(1)27个326相加的和是多少?(2
写什么题材的小说有虐待男生的片段????
煮肉汤时浮出水面的白泡沫是什么?
失业保险如何转移
银行打电话来说办的信用卡到了在打过去不是同
请先阅读下面短文,掌握其大意,然后根据短文
五羊-本田(羊栏路)地址在什么地方,我要处理
单选题不同意识之间最重要的差别是A.正确意识
求子助孕灵验方法
彭家圈在哪里啊,我有事要去这个地方
那种是医用芦荟胶?能去疤吗?请说明价格,功
90减去48除以6的商,差是什么
推荐资讯
单选题下列选项同属于省级行政单位的一组是A.
单选题列方程组解应用题一般有下列几个步骤:
中南民族大学和南昌大学哪个好啊?
为什么说水源不久将成为石油危机之后的另一个
撇水器作用
maurice blum是什么牌子的手表啊
初二,求艺术节表演节目
短发梨花烫怎么打理
批判性思维不是诋毁他人陈述阅读答案
完美主义者有什么优点和缺陷
日期怎么写
你别笑,笑断气
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?