SQL 加入没有公共列?
SQL join with no common column?
你好,我有 3 个表,我需要创建一个存储过程以将 ClassID 作为输入,结果将显示 ClassName、BookName、ClassType
问题是这些列中的每一列都在不同的表中,我在所有这些列之间没有公共列来使用 JOIN 命令
我的3张表结构如下
- ClassTable 得到列(ClassID、ClassName、CourseID、IsActive)
- BookTable 获得了这些列(BookID、BookName、ClassTypeID、IsActive)
- ClassType Table 得到这些列 (ClassTypeID, ClassType)
我尝试使用 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 */
你好,我有 3 个表,我需要创建一个存储过程以将 ClassID 作为输入,结果将显示 ClassName、BookName、ClassType 问题是这些列中的每一列都在不同的表中,我在所有这些列之间没有公共列来使用 JOIN 命令
我的3张表结构如下
- ClassTable 得到列(ClassID、ClassName、CourseID、IsActive)
- BookTable 获得了这些列(BookID、BookName、ClassTypeID、IsActive)
- ClassType Table 得到这些列 (ClassTypeID, ClassType)
我尝试使用 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 */