从具有复合主键的表中选择

时间:2011-08-22 11:14:54

标签: sql sql-server tsql sql-server-2008

我有一个名为StudentSchool的注入表,其中包含:

StudentSchoolID  StudentId   SchoolID
1                233         22

但是现在我想用这样的复合主键创建表:

StudentId   SchoolID
    233         22

在第一种情况下,我选择使用

select * from StudentSchool  
where (StudentId = 233) and (SchoolID = 22)      

但在第二种情况下如何使用它,因为它是主键

4 个答案:

答案 0 :(得分:7)

我不确定我是否正确理解了这个问题 如果您希望学生使用StudentId 233和SchoolId 22,那么它与第一个案例的查询相同。

答案 1 :(得分:2)

也许我错过了一些东西,但你的查询是相同的

select * from YourNewTable  where (StudentId  =233)and (ScoohlID=22) 

答案 2 :(得分:1)

如果通过"添加这两个ID并未验证我的业务"意味着当您尝试创建复合键时会出现PK违规,然后是因为您有多个行具有相同的StudentId + SchoolID对。

如果是这种情况,那么您需要在创建复合PK之前删除重复的行,从而对该表进行一些清理。

要查找重复的对,您可以执行类似

的操作
select StudentId, SchoolID
  from StudentSchool
 group by StudentId, SchoolID
having count(*) > 1

答案 3 :(得分:1)

如果理解正确,那第一种情况下的StudentSchoolID是连接表的主键,是吗?

也许你的区别在于第一种情况,即最佳查询:

select * from StudentSchool  
where StudentSchoolID = 1

和StudentSchoolID旨在作为“StudentID”和“SchoolID”对的代表。

您的查询是第二个不存在主ID的情况。

关于使用什么方式......我不知道。我个人更喜欢第二种,但我认为它通常取决于(谁知道!)具体情况。