我有一个名为StudentSchool
的注入表,其中包含:
StudentSchoolID StudentId SchoolID
1 233 22
但是现在我想用这样的复合主键创建表:
StudentId SchoolID
233 22
在第一种情况下,我选择使用
select * from StudentSchool
where (StudentId = 233) and (SchoolID = 22)
但在第二种情况下如何使用它,因为它是主键
答案 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的情况。
关于使用什么方式......我不知道。我个人更喜欢第二种,但我认为它通常取决于(谁知道!)具体情况。