【问题标题】:how to make inner join query for getting multiple tables selected column如何进行内部联接查询以获取多个表的选定列
【发布时间】:2020-03-07 10:17:02
【问题描述】:

我只是在研究项目学校管理。现在我刚刚查询检索其他表列。这是我的查询:

ALTER PROCEDURE [dbo].[GetTeacherList]
(
    @teacherid varchar(5) = null,
    @classid varchar(5) = null,
    @sectionid varchar(5) = null,
    @subjectid varchar(5) = null
)
AS
BEGIN

    SET NOCOUNT ON;
    select *,right('00000' + CAST(t.[PK_PID] AS varchar(5)) ,5) as ID, c.ClassName, su.SubjectName, s.SectionName
    from teachers t 

        inner join teacherclassassign tc on t.PK_PID = tc.TeacherID or (t.PK_PID is null and tc.TeacherID is null ) 
        inner join classes c on c.PK_PID = tc.ClassID or (c.PK_PID is not null and tc.ClassID is null)
        inner join sections s on s.PK_PID = tc.SectionID or (s.PK_PID is not null and tc.SectionID is null)
        inner join subjects su on su.PK_PID = tc.SubjectID or (su.PK_PID is not null and tc.SubjectID is null)

    where 1=1

    and (@teacherid is null or tc.[TeacherID] = CONVERT(INT,@teacherid))
    and (@classid is null or tc.[ClassID] = CONVERT(INT,@classid))
    and (@sectionid is null or tc.[SectionID] = CONVERT(INT,@sectionid))
    and (@subjectid is null or tc.[SubjectID] = CONVERT(INT,@subjectid))

    order by t.PK_PID asc
END

它怎么会返回我两行我想要表老师的所有行。

这是我想要的行数据:

这里是教师的所有数据:

我是如何达到这个结果的..请大家帮帮我。

【问题讨论】:

  • 你似乎想要LEFT JOIN,而不是INNER JOIN
  • 当我应用你的左连接时,它给了我重复的记录。
  • 太棒了..我只是删除所有或部分并检索结果。谢谢人

标签: sql tsql asp.net-4.0


【解决方案1】:

您需要根据所有教师的需要将第一个内部连接替换为 LEFT 连接。

下面我改了查询,看看能不能解决问题

设置NOCOUNT ON; 选择 *,right('00000' + CAST(t.[PK_PID] AS varchar(5)) ,5) 作为 ID, c.ClassName, su.SubjectName, s.SectionName 来自老师们

    LEFT join teacherclassassign tc on t.PK_PID = tc.TeacherID or (t.PK_PID is null and tc.TeacherID is null ) 
    inner join classes c on c.PK_PID = tc.ClassID or (c.PK_PID is not null and tc.ClassID is null)
    inner join sections s on s.PK_PID = tc.SectionID or (s.PK_PID is not null and tc.SectionID is null)
    inner join subjects su on su.PK_PID = tc.SubjectID or (su.PK_PID is not null and tc.SubjectID is null)

where 1=1

and (@teacherid is null or tc.[TeacherID] = CONVERT(INT,@teacherid))
and (@classid is null or tc.[ClassID] = CONVERT(INT,@classid))
and (@sectionid is null or tc.[SectionID] = CONVERT(INT,@sectionid))
and (@subjectid is null or tc.[SubjectID] = CONVERT(INT,@subjectid))

order by t.PK_PID asc

结束

【讨论】:

    猜你喜欢
    • 2016-10-27
    • 1970-01-01
    • 2013-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-09
    • 2022-12-08
    • 2014-12-16
    相关资源
    最近更新 更多