如何选择无法通过内部联接的行

时间:2016-09-15 07:41:36

标签: sql-server

我有这个查询,有一个问题。如何选择所有产品行,那些有类别的行和那些没有的行?当产品有类别时,我会得到产品类别,我也会得到零类产品。或者,如果它不真实,如何获得没有类别的所有产品行。

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];

1 个答案:

答案 0 :(得分: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];