Выбрать из таблицы с составным первичным ключом - PullRequest
4 голосов
/ 22 августа 2011

У меня есть таблица инъекций под названием StudentSchool, которая содержит:

StudentSchoolID  StudentId   SchoolID
1                233         22

Но теперь я хочу сделать таблицу с составным первичным ключом так:

StudentId   SchoolID
    233         22

В первом случае я выбираю с помощью

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

но во втором случае как это сделать с помощью первичного ключа

Ответы [ 4 ]

7 голосов
/ 22 августа 2011

Я не уверен, правильно ли я понимаю вопрос.
Если вы хотите, чтобы ученик с StudentId 233 и SchoolId 22, то это тот же запрос, что и в первом случае.

2 голосов
/ 22 августа 2011

Возможно, я что-то упускаю, но ваш запрос будет таким же

select * from YourNewTable  where (StudentId  =233)and (ScoohlID=22) 
1 голос
/ 27 марта 2013

Если вы правильно поняли, что StudentSchoolID в этом первом случае является первичным ключом таблицы объединения, не так ли?

Возможно, ваша разница в первом случае, когда лучший запрос будет:

select * from StudentSchool  
where StudentSchoolID = 1

и StudentSchoolID предназначен для представления пары «StudentID» и «SchoolID».

Ваш запрос относится ко второму, где основной идентификатор не указан.

О том, как использовать ... ну, я не знаю. Лично я предпочитаю второе, но я тоже думаю, что оно часто зависит (кто знал!) От конкретного случая.

1 голос
/ 22 августа 2011

Если «добавление обоих идентификаторов не проверяет мою компанию» означает, что вы получаете нарушение PK при попытке создать составной ключ, то это потому, что у вас более одной строки с одинаковым StudentId + SchoolID pair.

Если дело обстоит именно так, вам необходимо выполнить некоторую очистку этой таблицы, удалив дублирующиеся строки перед созданием составного PK.

Чтобы найти дублированные пары, вы можете сделать что-то вроде

select StudentId, SchoolID
  from StudentSchool
 group by StudentId, SchoolID
having count(*) > 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...