日期:2014-05-18  浏览次数:20538 次

求救:两个表的查询
表1   navclass  
id       classname     parentid  
1         游戏                   0
2         网络                   1
3         单机                   1
4         书籍                   0
----------------------------------------------
表2     sitelist
id     classid           url                             sitename
1         3               www.163.com                   游戏网站1
2         1               www.123.com                   游戏网站2
3         2               www.3333.com                 游戏网站3
-------------------------------------------------
需要的结果:

classname         url                                   sitename
游戏                   www.163.com                   游戏网站1
游戏                   www.123.com                   游戏网站2
游戏                   www.3333.com                 游戏网站2
==============================================
两个表的关系:   navclass   中id是主键,也是sitelist的外键
请哪个大虾给个   查询条件
我写了好些时间了     没有写出来啥     谢谢



------解决方案--------------------
select d.classname,c.url,c.sitename from sitelist c,(

select a.id,b.classname from navclass a ,navclass b where a.parentid=b.id) d where c.classid=d.id
union all
select a.classname,b.url,b.sitename from navclass a,sitelist b where a.id=b.class_id and a.classname= '游戏 '
------解决方案--------------------
如果是两级:
select bb.classname,aa.url,aa.sitename from sitelist aa left join
(select a.id,isnull(b.classname,a.classname)classname from navclass a left join navclass b on a.parentid=b.id) bb on aa.classid=bb.id
---------------如果是两级以上先建一函数
create function fun_0(@id int)returns varchar(20) as
begin
declare @f_id int,@f_name varchar(20)
select @f_id=parentid,@f_name=classname from navclass where id=@id
while @f_id <> 0
select @f_id=parentid,@f_name=classname from navclass where id=@f_id
return @f_name
end
--------------------------
select dbo.fun_0(classid)classname,url,sitename from sitelist