Получение данных из корабля отношения один-много из одной таблицы - PullRequest
0 голосов
/ 06 марта 2009

У меня есть одна таблица, и она содержит 4 столбца:

Id|Hospital|   Doctor|patient
1     A        D1      P11
2     B        D6      P61
3     A        D2      P21
4     A        D1      P12
5     B        D7      P71
6     B        D6      P62
7     B        D6      P63

Врачи являются уникальными для больницы. Они не работают в других больницах. Пациенты уникальны для врача. Они не посещают других врачей. В каждой больнице несколько врачей.

Если вы наблюдаете, есть несколько пациентов для каждого врача.

Теперь вопрос в том, как мне связать «только одного пациента» с каждым врачом? Это может быть любой пациент из записи.

Я с нетерпением жду, чтобы увидеть что-то вроде этого:

 Hospital Doctor Patient
  A       D1      P11
  A       D2      P21
  B       D6      P61
  B       D7      P71

Как получить идентификатор также в приведенной выше таблице, например:

id Hospital Doctor Patient
 1   A       D1      P11
 3   A       D2      P21
 2   B       D6      P61
 5   B       D7      P71

Заранее спасибо

Ответы [ 3 ]

6 голосов
/ 06 марта 2009

Как это:

SELECT Hospital, Doctor, MAX(Patient)
FROM table
GROUP BY Hospital, Doctor
ORDER BY Hospital, Doctor

Поскольку вы сказали, что вам все равно, какой пациент, я просто использовал MAX, но вы также можете использовать MIN или какую-либо другую функцию группировки.

1 голос
/ 06 марта 2009

Эрик ответил на вопрос, учитывая приведенную выше таблицу.

Если у вас есть контроль над дизайном базы данных:

Если врач может работать только в одной больнице, то в таблице «Доктор» должен быть указан HospitalId. И если у пациента действительно может быть только один врач, то в таблице пациентов должен быть DoctorId.

Пациент >> Врач >> Больница.

Это тогда полностью исключило бы эту таблицу, которая, по-видимому, поддерживает отношения «многие ко многим» между врачами, больницами и пациентами, что, по вашему мнению, невозможно. Возможно, вы захотите оставаться гибким.

1 голос
/ 06 марта 2009

Не могу не спросить, не должно ли быть три стола, а не один. Конечно, между Больницей и Доктором 1: 1, а между Доктором и Пациентом еще 1: 1. Каждый объект должен иметь другие атрибуты. Почему все это в одной таблице? Я бы нормализовал это.

Я не понимаю требования, согласно которому P61 или P63 предпочтительнее, чем D6 в больнице B, но я уверен, что вы делаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...