2016-10-04 3 views
0

Я пытаюсь закодировать запрос SQL Server 2012 с использованием базы данных AdventureWorks 2012 как часть школьного задания, и я создал свой запрос, но я не уверен, что он достаточно чистый и правильно настроен.Создание запроса SQL Server 2012 с инструкцией SUBQUERY и JOIN требует второй пары глаз?

Я должен использовать вместе с подзапросом и объединением.

«Вернуть территорию идентификатором CUSTOMERID & из таблицы Customer, где имя на столе SalesTerritory является„Центральный“»

Я не просил помощи, чтобы обмануть в любом случае, я просто нужна вторая пара глаз, потому что мне сложно это понять, я едва могу запрограммировать и мало люблю ее.

Вот мой запрос до сих пор:

SELECT Sales.Customer.CustomerID 
     , Sales.Customer.TerritoryID,Sales.SalesTerritory.Name 
FROM Sales.Customer 
INNER JOIN Sales.SalesTerritory 
    ON Sales.Customer.TerritoryID = Sales.SalesTerritory.TerritoryID 
WHERE (Sales.SalesTerritory.Name = N'central') 
+0

Этот запрос возвращает всех клиентов, где их территория является центральной. Правильно? –

+0

Да, я вообще не очень хорошо программирую, но это именно то, что мне нужно делать. Файл результатов делает то, что мне нужно, но я хочу, чтобы я правильно закодировал запрос, чтобы соответствовать требованиям. Это, как правило, смущает меня. –

+0

Вместо того, чтобы делать обычную INNER JOIN в таблице SalesTerritory, выполните объединение в подзапросе SalesTerritory, где Name = 'central', и у вас будет требуемый запрос. – Jens

ответ

1
SELECT Sales.Customer.CustomerID, Sales.Customer.TerritoryID, SalesTerritoryFiltered.Name 
FROM Sales.Customer 
INNER JOIN (SELECT * 
      FROM Sales.SalesTerritory 
      WHERE Sales.SalesTerritory.Name = N'central') SalesTerritoryFiltered 
    ON Sales.Customer.TerritoryID = SalesTerritoryFiltered.TerritoryID 

Это один имеет внутреннее соединение и подзапрос, содержащий ваши отфильтрованные результаты. Непроверенный, но должен работать.

+0

ОК, поэтому я вижу, где я сделал свою ошибку, теперь вижу, как вы выполнили Sub-запрос. Мне просто нужно больше практики, я думаю. Я сделаю изменения, которые вы предложили, и попробуйте. –

+0

Просто, чтобы быть ясным. Вы не ошиблись. Обычно я пишу свой запрос, как вы, но, учитывая запрос на использование join & subquery, это альтернативное решение. Я стараюсь избегать подзапросов, когда могу, потому что я чувствую, что они уменьшают читаемость. – Jens

+0

Ваша поправка к моему коду работает как шарм, и я удивлен, что обе версии дают одинаковый результат! –

0

Замените WHERE на AND, что делает критерии фильтрации более эффективными и приводит к уменьшению количества выборки строк при подключении к таблице. Это также может помочь в улучшении производительности!

SELECT Sales.Customer.CustomerID 
     ,Sales.Customer.TerritoryID,Sales.SalesTerritory.Name 
FROM Sales.Customer 
INNER JOIN Sales.SalesTerritory 
ON Sales.Customer.TerritoryID = Sales.SalesTerritory.TerritoryID 
AND Sales.SalesTerritory.Name = N'central' 
+1

К сожалению, учитель дал понять, что нам нужно было использовать инструкцию Where, пока позже в семестре. Просто мы получаем небольшой ввод или направление до окончания оценки, так что вы можете себе представить, как это заставляет меня чувствовать? Но спасибо за ваш вклад. –