首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

关于多表SELECT,请MSSQL2000好手支招

2012-09-02 
关于多表SELECT,请MSSQL2000高手支招。数据库为MSSQL2000,如以下三表:员工表、员工爱好表、爱好配置表DB_Emp:

关于多表SELECT,请MSSQL2000高手支招。
数据库为MSSQL2000,如以下三表:员工表、员工爱好表、爱好配置表

DB_Emp:员工
--------------------
Emp_Id name
1 张三
2 李四
3 杜明
4 李果
5 赵刚

DB_Emp_Like:员工爱好
---------------------
Emp_Id Like_No
1 101
1 102
1 105
3 101
3 105
4 101
4 102
5 101
5 102
5 103

DB_Like:爱好表
--------------------
Like_No Name
101 打篮球
102 打乒乓球
103 唱歌
104 登山
105 游泳

如上三表,现在有一需求,公司根据需要可能会根据情况查询同时具备几个爱好的员工来组织活动,请为怎么查询?
目前我能在MSSQL2008下通过FOR XML PATH能实现,不知道在MSSQL2000下怎么实现??? 谢谢!

[解决办法]
我来猜一个

2000需要用函数来实现







SQL code
--> 测试数据:[DB_Emp]IF OBJECT_ID('[DB_Emp]') IS NOT NULL DROP TABLE [DB_Emp]GO CREATE TABLE [DB_Emp]([Emp_Id] INT,[name] VARCHAR(4))INSERT [DB_Emp]SELECT 1,'张三' UNION ALLSELECT 2,'李四' UNION ALLSELECT 3,'杜明' UNION ALLSELECT 4,'李果' UNION ALLSELECT 5,'赵刚'--> 测试数据:[DB_Emp_Like]IF OBJECT_ID('[DB_Emp_Like]') IS NOT NULL DROP TABLE [DB_Emp_Like]GO CREATE TABLE [DB_Emp_Like]([Emp_Id] INT,[Like_No] INT)INSERT [DB_Emp_Like]SELECT 1,101 UNION ALLSELECT 1,102 UNION ALLSELECT 1,105 UNION ALLSELECT 3,101 UNION ALLSELECT 3,105 UNION ALLSELECT 4,101 UNION ALLSELECT 4,102 UNION ALLSELECT 5,101 UNION ALLSELECT 5,102 UNION ALLSELECT 5,103--> 测试数据:[DB_Like]IF OBJECT_ID('[DB_Like]') IS NOT NULL DROP TABLE [DB_Like]GO CREATE TABLE [DB_Like]([Like_No] INT,[Name] VARCHAR(8))INSERT [DB_Like]SELECT 101,'打篮球' UNION ALLSELECT 102,'打乒乓球' UNION ALLSELECT 103,'唱歌' UNION ALLSELECT 104,'登山' UNION ALLSELECT 105,'游泳'--------------开始查询--------------------------IF OBJECT_ID('F_Str') IS NOT NULL    DROP FUNCTION F_Str go CREATE FUNCTION F_Str ( @Emp_Id INT )RETURNS VARCHAR(100)AS BEGIN   DECLARE @S VARCHAR(100)   SELECT  @S = ISNULL(@S + ',', '') + c.[Name]  FROM    [DB_Emp_Like] b ,          [DB_Like] c  WHERE   b.[Like_No] = c.[Like_No]          AND b.[Emp_Id] = @Emp_Id  RETURN @S END go SELECT DISTINCT a.[Emp_Id],a.[name],name=dbo.F_Str(a.[Emp_Id]) FROM [DB_Emp] a,[DB_Emp_Like] bWHERE a.[Emp_Id]=b.[Emp_Id] /*Emp_Id      name name----------- ---- ----------------------------------------------------------------1           张三   打篮球,打乒乓球,游泳3           杜明   打篮球,游泳4           李果   打篮球,打乒乓球5           赵刚   打篮球,打乒乓球,唱歌(4 行受影响)*/
[解决办法]
将#4楼改成以下便可
SQL code
IF OBJECT_ID('F_Str') IS NOT NULL    DROP FUNCTION F_Str go CREATE FUNCTION F_Str ( @Like_No INT )RETURNS VARCHAR(100) AS BEGIN   DECLARE @S VARCHAR(100)   SELECT  @S = ISNULL(@S + ',', '') + a.[name]            FROM    [DB_Emp] a, [DB_Emp_Like] b   WHERE   a.[Emp_Id] = b.[Emp_Id]          AND b.[Like_No] = @Like_No  RETURN @S END go SELECT DISTINCT b.[Name],name=dbo.F_Str(a.[Like_No]) FROM [DB_Emp_Like] a,[DB_Like] bWHERE a.[Like_No]=b.[Like_No] 

热点排行