作者LaPass (LaPass)
看板Database
标题[问题] 新手,想进步。
时间Sat Feb 4 21:47:38 2012
自己刚开始使用 SQL SERVER 2008
以前都是使用MySQL,所以用的都只是简单的语法
例如:SELECT * FROM table INNER JOIN table2 ON ... WHERE... ORDER BY
像这种而已
开始用SQL SERVER 之後
发现SQL SERVER似乎可以只靠SQL 语法就去做到许多事
於是想开始学习这一块
最近接获一项任务,目标表格是长这样
TableA
taid AllowList AllowMember
1 ,0,
2 ,1,3,4,
3
4 ,2,5,
5
6
.
.
其中 TableA,AllowList 中的数字是指 TableB.tbid
TableB
tbid id name case group
1 地球 1 0
2 台湾 1 1 ← case=1 代表是分类类别
group 是上层的tbid
3 台中市 1 2 ← group = 2,所以是台湾的子类别
4 qw8221 王小明 2 3 ← case=2 是成员,所以王小明是台中人(3)
而,台中市又在台湾下,所以也是台湾人
5 abc01 张小婴 2 2 ← case=2 是成员,所以张小婴是台湾人(2)
.
.
.
id是唯一值,不会重覆
这种阶层关系可以无限制的拓展下去
任务内容是要从 TableA.AllowList 找清单,去TableB查表
找出所有成员(成员的case为2)的TableB.id
整理成 ,id1,id2,id3, 的字串格式 (只有成员,如果是群组,就去找群组下的成员ID)
写入 TableA.AllowMember 当中
而 AllowList 的数字,可能是一个群组,或是成员
而且,当AllowList中的值为空字串时,AllowMember的值也必须是空字串
以及,当AllowList中的值是0时,AllowMember中的值则为 EVERYONE 字串
(允许所有人)
====================================================
想请问,这可以用纯SQL语法做到吧?
我原本想只靠SQL语法解决,可是我发现一堆东西都不会
完全没有SQL的sense.....
想下手也不知道怎麽下手
我知道要捞出 AllowList 怎麽捞
可是不知道要怎麽从 AllowList 捞出东西来後
再把 AllowList 拆开成 tbid ,再从拆开的 tbid 去查询 id 组成字串写回去
(如果是群组,还要去找群组中的成员)
最後,我是靠程式用递回解决交差
但是,还是会想想知道,到底要怎麽用纯 SQL 写出这种功能
--
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 125.233.155.49
1F:推 lbeeon:我也在弄类似的东西不过我是用复合key不知道有没有更好方法 02/04 22:49
2F:→ LaPass:SQL好难 QQ 02/05 01:04
4F:→ TeemingVoid:Model Your Data Hierarchies With SQL Server 2008 02/05 02:11
5F:→ LaPass:谢谢连结 我研究看看 02/05 10:56