Sql 区分行并从另一个表连接另一列

Sql 区分行并从另一个表连接另一列,sql,sql-server,join,sql-server-2012,distinct,Sql,Sql Server,Join,Sql Server 2012,Distinct,我对此表示质疑: SELECT DISTINCT CategoryId FROM Products 它完美地检索表产品中的不同类别 但当我试图从同一查询中的表类别中获取相应的CategoryName时: SELECT DISTINCT p.CategoryId, c.CategoryName FROM Products p INNER JOIN Categories c ON p.CategoryId = c.CategoryId 它检索的行比“它应该”检索的行多得多 为了清楚起见,我只需要

我对此表示质疑:

SELECT DISTINCT CategoryId
FROM Products
它完美地检索表产品中的不同类别

但当我试图从同一查询中的表类别中获取相应的CategoryName时:

SELECT DISTINCT p.CategoryId, c.CategoryName
FROM Products p
INNER JOIN Categories c
ON p.CategoryId = c.CategoryId
它检索的行比“它应该”检索的行多得多

为了清楚起见,我只需要知道在同一个结果集中,表产品中不同类别的名称是什么。可能吗

模式:

CREATE TABLE [dbo].[Categories](
    [CategoryId] [int] NOT NULL,
    [CategoryName] [nvarchar](75) NOT NULL,
    [dbts] [timestamp] NOT NULL
) ON [PRIMARY]

CREATE TABLE [dbo].[Products](
    [ProductId] [int] NOT NULL,
    [Year] [nvarchar](4) NOT NULL,
    [SupplyId] [nvarchar](15) NULL,
    [SupplyName] [nvarchar](80) NULL,
    [CategoryId] [int] NULL,
    [cdate] [datetime] NULL,
    [mdate] [datetime] NULL
 CONSTRAINT [PK_products] PRIMARY KEY CLUSTERED 
(
    [ProductId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

如果CategoryId是CategoryId的主键,则查询应该可以工作。请告诉我们此查询的输出:选择COUNT*FROM SELECT 1 FROM Categories GROUP BY CategoryId,COUNTDISTINCT categoryname>1 x;请显示表架构和导出结果..仅查询无效!如果类别使用不同的名称多次列出相同的categoryID,则第二个查询返回的行数比第一个查询多的唯一方法是;正如我所相信的那样,我将试图确定。您评论CategoiId不是类别的主键。。。你的加入应该是什么?这个问题源于糟糕的数据;或对数据的误解;不错的代码。您还应该注意,进行连接不需要主键;它们会有所帮助,但一个独特的索引也会起作用。您可以加入非唯一/关键点,但您应该期望得到您在本练习中所做的结果!