Создать переменную sql и запросить другие таблицы - PullRequest
1 голос
/ 23 ноября 2011

Я пытаюсь запросить таблицу и получить результаты в переменную. С результатами переменной выполните еще один запрос на выборку, используя сведения о переменной в качестве фильтра.

Пока:

DECLARE @storeIds int    
SET @storeIds = (SELECT StoreID FROM Store WHERE ParentStoreID=9)

--print @storeIds

SELECT c.FirstName, c.LastName, c.CustomerId, r.StoreID
FROM Consumer AS c
    INNER JOIN Purchases AS r ON c.CustomerId= r.CustomerId
WHERE r.StoreID = @storeIds
   -- (r.StoreID = 9) OR
   -- (r.StoreID = 10) OR
   -- (r.StoreID = 11)
GROUP BY c.FirstName, c.LastName, c.CustomerId, r.StoreID
ORDER BY c.FirstName

Я получаю ошибку:

Подзапрос вернул более 1 значения. Это недопустимо, если подзапрос следует =,! =, <, <=,>,> = Или когда подзапрос используется как выражение.

Ответы [ 4 ]

2 голосов
/ 23 ноября 2011

Если вам не нужна переменная @StoreIds в другом месте, вы можете просто изменить свое предложение WHERE на:

WHERE r.StoreID IN (SELECT StoreID FROM Store WHERE ParentStoreID = 9)
1 голос
/ 23 ноября 2011

Ваша проблема в том, что несколько магазинов имеют одинаковый ParentStoreID, поэтому при запросе вы пытаетесь поместить несколько значений в переменную INT.

Вы можете посмотреть на попытку:

SELECT c.FirstName, c.LastName, c.CustomerId, p.StoreID
FROM Consumer AS c
INNER JOIN Purchases AS p ON c.CustomerId = p.CustomerId
INNER JOIN Store AS s ON p.StoreId = s.StoreId
WHERE s.ParentStoreID = 9
GROUP BY c.FirstName, c.LastName, c.CustomerId, r.StoreID
ORDER BY c.FirstName

Этот запрос должен дать вам все покупки, которые вы хотите, из всех магазинов с ParentStoreId = 9.

Информация о JOINS также может вам помочь.

0 голосов
/ 23 ноября 2011

Можно сделать разными способами:

  1. Используя подзапрос

    SELECT c.FirstName, c.LastName, c.CustomerId, r.StoreID
    FROM Consumer AS c
       INNER JOIN Purchases AS r ON c.CustomerId= r.CustomerId
    WHERE r.StoreID = (SELECT StoreID FROM Store WHERE ParentStoreID=9)
    GROUP BY c.FirstName, c.LastName, c.CustomerId, r.StoreID
    ORDER BY c.FirstName
    
  2. Используя операцию соединения

    SELECT c.FirstName, c.LastName, c.CustomerId, r.StoreID
    FROM Consumer AS c
        INNER JOIN Purchases AS r ON c.CustomerId= r.CustomerId 
        INNER JOIN (SELECT StoreID FROM Store WHERE ParentStoreID=9) AS s(StoreID)
            ON r.StoreID = s.StoreID
    GROUP BY c.FirstName, c.LastName, c.CustomerId, r.StoreID
    ORDER BY c.FirstName
    
0 голосов
/ 23 ноября 2011

Барри и Адам Венгер имеют лучший подход, но для непосредственного устранения ошибки вы можете убедиться, что получаете только один результат при установке переменной, используя модификатор top 1. Как:

DECLARE @storeIds int     
SET @storeIds = (SELECT top 1 StoreID FROM Store WHERE ParentStoreID=9) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...