首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在sql server查询中联接两个以上的表

如何在sql server查询中联接两个以上的表
EN

Stack Overflow用户
提问于 2013-04-24 14:14:14
回答 2查看 6K关注 0票数 0

我在SQL Server2008中创建了一个存储过程,以便从第一个表中查找学生数据,从第二个表中查找健康详细信息,从第三个表中查找出勤详细信息。我想使用left outer或inner join连接这些表。

SQL-query如下:

代码语言:javascript
运行
复制
create proc [dbo].[GetStdProfile]
@Adm_No int
AS
BEGIN   
    SELECT sd.*,hd.*,ad.* 
    FROM Student_Details sd left outer join Health_Details hd left outer join Attendance_Details ad 
    on sd.Adm_No=hd.Adm_No  and sd.Adm_No = ad.Adm_No and hd.Adm_No=ad.Adm_No
END
EN

回答 2

Stack Overflow用户

发布于 2013-04-24 14:21:26

像这样修改您的查询:

代码语言:javascript
运行
复制
create proc [dbo].[GetStdProfile]
    @Adm_No int  
BEGIN   
    SELECT sd.*,hd.*,ad.* 
    FROM Student_Details sd 
       left outer join Health_Details hd on sd.Adm_No = hd.Adm_No
       left outer join Attendance_Details ad on hd.Adm_No = ad.Adm_No
END

注意:您尚未使用参数@Adm_No。如果不需要,请将其删除。

票数 2
EN

Stack Overflow用户

发布于 2013-04-24 14:22:23

如果您要执行select *,则不需要在它们前面加上前缀。我不知道您是否在运行过程时遇到了问题,但是joins首先和后来变得有点不正常。当您连接共享相同字段和id的表时,不需要将单个表连接到多个表。你让hd.Adm_No加入了sd.Adm_No和ad.Adm_no。通过执行以下操作,可以很容易地过滤掉这种关系:

代码语言:javascript
运行
复制
create proc [dbo].[GetStdProfile] 
@Adm_No int 
AS 
BEGIN
  SELECT * FROM Student_Details sd left outer join Health_Details hd on 
        sd.Adm_No=hd.Adm_No left outer join Attendance_Details ad  
        on hd.Adm_No = ad.Adm_No 
    Where sd.Adm_No = @Adm_No;
END
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16184639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档