没有公共列的sql联接?

vmpqdwk3  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(337)

你好,我有3个表,我需要创建一个存储过程有classid作为输入,结果将显示classname,bookname,classtype的问题是,这些列中的每一个都在不同的表中,我没有公共列之间的所有使用连接命令
我的3个表的结构如下
classtable获取列(classid、classname、courseid、isactive)
booktable获取了这些列(bookid、bookname、classtypeid、isactive)
classtype表得到了这些列(classtypeid,classtype)
我试图使用交叉连接,但我觉得它给我随机结果有什么办法来实现这一点?提前谢谢

xfyts7mz

xfyts7mz1#

假设表的结构如下所示:

create table ClassTable(
        ClassID int not null identity(1, 1),
        ClassName nvarchar(255) null,
        CourceID int,
        IsActive bit,
        ClassTypeID int /* I added this column for join with [ClassType] table */
    )

    create table ClassType(
        ClassTypeID int not null identity(1, 1),
        ClassType nvarchar(255)
    )

    create table BookTable(
        BookID int not null identity(1, 1),
        BookName nvarchar(255),
        ClassTypeID int,
        IsActive bit
    )

创建用于显示的存储过程的脚本 [ClassName] , [BookName] 以及 [ClassType] 路过的田地 ClassID 作为参数,将如下所示:

use [ NAME_OF_YOUR_DATABASE ]/* this need to define a name of your database */
    go

    set ANSI_NULLS on
    go
    set QUOTED_IDENTIFIER on
    go

    create procedure [dbo].[ NAME_YOUR_STORED_PROCEDURE ]/* this need to define a name of your storedproc */
        @ClassID int,

        @ClassName nvarchar(255) output,
        @BookName nvarchar(255) output,
        @ClassType nvarchar(255) output

    as
    begin

        set NOCOUNT on

        select 
            set @ClassName = classTable.ClassName
            set @BookName = bookTable.BookName,
            set @ClassType = classType.ClassType

        from       
            ClassTable as classTable
            inner join ClassType as classType on classType.ClassTypeID = classTable.ClassTypeID
            inner join BookTable as bookTable on bookTable.ClassTypeID = classType.ClassTypeID

        where 
            classTable.ClassID = @ClassID

    end

然后,可以通过参数调用存储过程

exec [ NAME_YOUR_STORED_PROCEDURE ] 123 /* this need to define value for ClassID as param */

相关问题