2016-09-15 62 views
0

我有这个查询,并且存在一个问题。如何选择所有产品行,那些有类别和那些没有?当产品有类别时,我将获得产品与类别,也会得到具有空类别的产品。或者如果它不真实,如何获得所有没有分类的产品行。如何选择不能通过内部联接的行

select distinct [dbo].[Category].[CategoryID],[dbo].[Product].[ProductID],[dbo].[Product].[Name],[dbo].[Product].[Description],[dbo].[Product].[Count], 
      [dbo].[Product].[Price],[dbo].[Product].[Weight],[dbo].[Product].[Width],[dbo].[Product].[Length],[dbo].[Product].[Height],[BarCode], 
      [dbo].[Product].[Image],[dbo].[Product].[Date] from [dbo].[Product] 
      inner join [dbo].[ProductCategory] 
      on [dbo].[Product].[ProductID] = [dbo].[ProductCategory].[ProductID] 
      inner join [dbo].[Category] 
      on [dbo].[ProductCategory].[CategoryID] = [dbo].[Category].[CategoryID] 
      order by [dbo].[Product].[ProductID]; 
+0

尝试'LEFT JOIN',而不是'INNER JOIN' – jedifans

+1

旁注:你得喜欢那些'[DBO ]'。 – trincot

回答

0

根本就左如下加入并使用的,而不是全名别名:

SELECT DISTINCT ca.[CategoryID], 
    p.[ProductID], 
    p.[NAME], 
    p.[Description], 
    p.[COUNT], 
    p.[Price], 
    p.[Weight], 
    p.[Width], 
    p.[LENGTH], 
    p.[Height], 
    [BarCode], 
    p.[Image], 
    p.[DATE] 
FROM [dbo].[Product] p 
LEFT JOIN [dbo].[ProductCategory] pr ON p.[ProductID] = pr.[ProductID] 
LEFT JOIN [dbo].[Category] ca ON pr.[CategoryID] = ca.[CategoryID] 
ORDER BY p.[ProductID]; 
+0

谢谢,它完美的作品! – AidOnline01