Проблема с джойнами
Подскажите, почему одна процедура работает, а вторая нет?
Работает:
ALTER PROCEDURE [dbo].[UpdateCategory]
@ID int,
@Name nvarchar(50),
@Description nvarchar(50),
@Store nvarchar(50)
AS
BEGIN
SET NOCOUNT ON;
UPDATE Categories
SET CategoryName = @Name,
Description = @Description,
StoreID = (SELECT StoreId FROM Stores WHERE StoreName = @Store)
WHERE CategoryID = @ID;
END
Это не работает:
ALTER PROCEDURE [dbo].[UpdateCategory]
@ID int,
@Name nvarchar(50),
@Description nvarchar(50),
@Store nvarchar(50)
AS
BEGIN
SET NOCOUNT ON;
UPDATE Categories
SET CategoryName = @Name,
Description = @Description,
StoreID = Stores.StoreId
FROM Categories
INNER JOIN Stores ON Categories.StoreId = Stores.StoreId
WHERE Categories.CategoryID = @ID
END
Также не работает с лефт джойном.
Ответы (1 шт):
Автор решения: rotabor
→ Ссылка
Для начала я бы посоветовал выполнить
SELECT *
FROM Categories
INNER JOIN Stores ON Categories.StoreId = Stores.StoreId
WHERE Categories.CategoryID = @ID
и посмотреть на результат. Это может натолкнуть на мысль: "А что не так?"
Будем считать, что первая процедура правильная. Значит, есть единственное условие отбора записей "CategoryID = @ID". А JOIN во второй процедуре налагает второе условие "Categories.StoreId = Stores.StoreId", что является лишним.
Мне кажется, что первый вариант безальтернативен, так как необходимо просто получить из Stores StoreId, соотвествующий @Store, а не отбирать записи в Categories с помощью дополнительного условия JOIN.