注册 登录
编程论坛 SQL Server论坛

鏈接表自已

rgbtdkjcel 发布于 2009-08-17 20:47, 670 次点击
begin
    if @Type='All'
        select  a.*,  b. MenuName as PMenuName from SysMenu a left join SysMenu b  on a.PMenuID=b.MenuID where a.Status='Y' order by cast(a.MenuID as int)
    else if @Type='Single'
        select  a.*,  b. MenuName as PMenuName from SysMenu a left join SysMenu b  on a.PMenuID=b.MenuID where a.MenuID=@FieldValue
    else
        select  a.*,  b. MenuName as PMenuName from SysMenu a left join SysMenu b  on a.PMenuID=b.MenuID where a.Status='Y' order by cast(a.MenuID as int)
end


加粗部份為何需要這樣來鏈接自已呢??在什麼情況下需要這樣鏈接查詢呢?
5 回复
#2
subMain2009-08-17 22:54
第一个SQL语句和第三个SQL语句貌似一样啊。。

一表连接同一个表时,一般表明这个表中的数据有子父关系。
根据你SysMenu表举个例子。

SysMenu表中的数据
PMenuID    MenuID    MenuName
-----------------------------
000        101        文件
101        102        新建
101        103        打开
101        104        退出
102        105        窗口
000        206        编辑
206        207        剪切
206        208        复制
206        209        粘贴
102        110        发信息
000        301        收藏
301        302        添加到收藏夹
#3
rgbtdkjcel2009-08-18 08:46
還是有點沒有看明白是什麼意思!呵呵!
#4
subMain2009-08-18 21:52
回复 3楼 rgbtdkjcel

按照上面的SQL语句中连接条件来考虑的话,应该是下面的情况:
别名a表中的数据
PMenuID    MenuID    MenuName
-----------------------------
101        102        新建
101        103        打开
101        104        退出
102        105        窗口
206        207        剪切
206        208        复制
206        209        粘贴
102        110        发信息
301        302        添加到收藏夹

别名b表中的数据
PMenuID    MenuID    MenuName
-----------------------------
000        101        文件
000        206        编辑
000        301        收藏

a表中的数据相当于子数据,b表中的数据相应于父数据。
a表中的数据用PMenuID来连接b表中数据的MenuID字段。
用这种方式来确定对应关系,不知LZ明白否?
#5
rgbtdkjcel2009-08-19 07:17
明白了。謝謝指導
#6
rgbtdkjcel2009-08-19 07:20

drop table shiyan
go
create table shiyan(id int)
insert into shiyan select 333
insert into shiyan select 333
insert into shiyan select 333
insert into shiyan select 333
insert into shiyan select 333
insert into shiyan select 333
select * from shiyan
declare @id int
update shiyan set @id=isnull(@id,id),id=@id-100,@id=@id+100
 
subMain上面語句中。後面的update語句是如何理解呢?》我知道是更新表中的數據,,但是。set後面的語句就不明白是什麼意思啦!
 
1