2013-12-02 2 views
0

В базе данных AdventureWorks2012, я должен использовать Sales.SalesPerson, Sales.SalesOrderHeader, Sales.SalesOrderDeatil и Production.Product таблицы с указанием всех различных продуктов, которые имеют ProductID и имя, которые продаются на территории 5.Использование DISTINCT в SQL

Ниже моя попытка ответить ,

SELECT DISTINCT 
    sod.ProductID, 
    p.Name 
FROM 
    Sales.SalesPerson SP, 
    Sales.SalesOrderHeader SOH, 
    Sales.SalesOrderDetail SOD, 
    Production.Product P 
WHERE 
    SP.BusinessEntityID = soh.SalesOrderID AND 
    soh.SalesOrderID = sod.SalesOrderID AND 
    sod.SalesOrderID = p.ProductID 

Запрос выполнен успешно, но было повреждено 0 строк. Что я делаю не так?

+0

@a_horse_with_no_name Ах, моя ошибка. –

+3

Ваши соединения находятся на неправильных полях, особенно в первом и третьем условиях. Кроме того, изучите правильный синтаксис соединения (ключевое слово 'join') вместо того, чтобы делать неявные объединения. –

ответ

0
sod.SalesOrderID = p.ProductID 

Я предполагаю, что это orderid = productid? вероятно, ошибочно, может быть, вы хотели

sod.ProductID = p.ProductID 
+0

Нет, у меня все еще есть «0 строк, затронутых» – user3047713

0
SELECT DISTINCT 
    SOD.ProductID, 
    P.Name AS ProductName 
FROM 
    Sales.SalesPerson SP, 
    Sales.SalesOrderHeader SOH, 
    Sales.SalesOrderDetail SOD, 
    Production.Product P 
WHERE 
    SP.BusinessEntityID = SOH.BusinessEntityID AND 
    SOH.SalesOrderID = SOD.SalesOrderID AND 
    SOD.ProductID = P.ProductID AND 
    SOH.TerritoryID = 5; 
+0

Не работает. Msg 207, уровень 16, состояние 1, строка 10 Недопустимое имя столбца 'BusinessEntityID'. – user3047713

+0

Если вы получили сообщение об ошибке, например, недопустимое имя столбца, вам необходимо проверить таблицы базы данных, чтобы увидеть, как вызывается столбцы. В этом случае вы пытаетесь найти связь между таблицей SalesOrderHeader и таблицей SalesPerson. У меня нет AdventureWorks2012, но в более старой версии эти столбцы называются SalesPersonID – sgmoore