Несколько запросов INNER JOIN SELECT не возвращают данные - PullRequest
0 голосов
/ 31 октября 2019

Это хранимая процедура для выбора полной информации о вине. Он принимает в качестве параметра идентификатор хранилища.

Это правильно строится и по структуре похоже на многие sp-ы, которые я написал, но не возвращает данных. Что-то мне не хватает?

CREATE PROCEDURE [sp_retrieveInventory_Full]
(
    @StorageLocationID          [int]
)
AS
BEGIN
    SELECT  [WineName],
            [RackID],
            [RackColumn],
            [RackRow],
            [WineTypeID],
            [WineVarietyID],
            [VintnerName],
            [dbo].[Vintner].[Country],
            [dbo].[Vintner].[StateProvince],
            [dbo].[Vintner].[Region],
            [VendorName],
            [Vintage],
            [PurchaseDate],
            [PurchasePrice],
            [BottleSizeID],
            [ABV],
            [DrinkByDate],
            [FoodType],
            [TastingNotes],
            [RatedBy],
            [RatingScore]
    FROM    [dbo].[StorageLocation] 
            INNER JOIN [dbo].[Wine]
        ON  [dbo].[StorageLocation].[WineID] = [dbo].[Wine].[WineID]
            INNER JOIN [dbo].[Vintner]
        ON  [dbo].[Vintner].[VintnerID] = [dbo].[Wine].[VintnerID]
            INNER JOIN [dbo].[Vendor]
        ON  [dbo].[Vendor].[VendorID] = [dbo].[Wine].[VendorID]
            INNER JOIN [dbo].[Pairing]
        ON  [dbo].[Pairing].[PairingID] = [dbo].[Wine].[PairingID]
            INNER JOIN [dbo].[Rating]
        ON  [dbo].[Rating].[RatingID] = [dbo].[Wine].[RatingID]
    WHERE   [dbo].[StorageLocation].[StorageLocationID] = @storageLocationID
END
GO

1 Ответ

0 голосов
/ 31 октября 2019

Когда запрос повторно не приводит ни к какому результату, это связано с тем, что не существует записей, удовлетворяющих условиям в условии where, или, в случае запросов, содержащих внутренние объединения, по крайней мере одно из объединений on не возвращает никаких записей.

Самый простой способ выяснить, в каком объединении происходит путаница в вашем запросе, - это начать удалять объединения по одному, но для этого нужно сначала изменить предложение select.

ЧтоМне нравится делать следующее: начать со всех объединений, кроме последнего - посмотреть, возвращает ли он какие-либо записи:

SELECT  1
FROM    [dbo].[StorageLocation] 
        INNER JOIN [dbo].[Wine]
    ON  [dbo].[StorageLocation].[WineID] = [dbo].[Wine].[WineID]
        INNER JOIN [dbo].[Vintner]
    ON  [dbo].[Vintner].[VintnerID] = [dbo].[Wine].[VintnerID]
        INNER JOIN [dbo].[Vendor]
    ON  [dbo].[Vendor].[VendorID] = [dbo].[Wine].[VendorID]
        INNER JOIN [dbo].[Pairing]
    ON  [dbo].[Pairing].[PairingID] = [dbo].[Wine].[PairingID]
--        INNER JOIN [dbo].[Rating]
--    ON  [dbo].[Rating].[RatingID] = [dbo].[Wine].[RatingID]
WHERE   [dbo].[StorageLocation].[StorageLocationID] = @storageLocationID

Если нет, закомментируйте следующее объединение и снова выполните запрос. Промойте и повторите.

Обратите внимание, однако, что может быть несколько внутренних соединений, которые не позволяют запросу возвращать записи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...