SQL объединить без общего столбца? - PullRequest
0 голосов
/ 10 июля 2020

Здравствуйте, у меня есть 3 таблицы, в которых мне нужно создать хранимую процедуру, чтобы иметь ClassID в качестве входных данных, и результаты покажут ClassName, BookName, ClassType проблема в том, что каждый из этих столбцов находится в разных таблицах, а у меня нет общие столбцы между всеми ними для использования команды JOIN

моя структура из 3 таблиц выглядит следующим образом

  • ClassTable получил столбцы (ClassID, ClassName, CourseID, IsActive)
  • BookTable получил эти столбцы (BookID, BookName, ClassTypeID, IsActive)
  • ClassType Table получил эти столбцы (ClassTypeID, ClassType)

Я пытался использовать CROSS JOIN, но чувствовал, что это дает мне случайные результаты есть ли способ выполнить sh это? Заранее спасибо

1 Ответ

0 голосов
/ 10 июля 2020

Предположим, что структура ваших таблиц выглядит следующим образом:

    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 */
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...