我有这个查询,有一个问题。如何选择所有产品行,那些有类别的行和那些没有的行?当产品有类别时,我会得到产品类别,我也会得到零类产品。或者,如果它不真实,如何获得没有类别的所有产品行。
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 :(得分: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];