SQL 加入没有公共列?

SQL join with no common column?

你好,我有 3 个表,我需要创建一个存储过程以将 ClassID 作为输入,结果将显示 ClassName、BookName、ClassType 问题是这些列中的每一列都在不同的表中,我在所有这些列之间没有公共列来使用 JOIN 命令

我的3张表结构如下

我尝试使用 CROSS JOIN,但我觉得它给我的结果是随机的 有什么办法可以做到这一点? 提前致谢

假设您的表结构如下所示:

    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
    )

通过将 ClassID 作为参数传递来创建用于显示 [ClassName][BookName][ClassType] 字段的存储过程的脚本如下所示:

    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 */