У меня есть 2 таблицы: одна - Пользователь, а другая - TreatmentStatusTable. Пользовательские таблицы имеют 2 типа пользователей: сначала «доктор», а другой - «пациент». Врач может лечить пациента, и его состояние заносится в таблицу TreatmentStatusTable.
Каждый раз, когда врач осматривает пациента, он отмечается. В следующем запросе я хочу видеть только тех пациентов, которых врач пока не посещал. Как мне добиться этого эффективно?
Вот мой сценарий:
Пользователь
id
name
dateObirth
userType- doctor/patient
TreatmentStatusTable
treated_by- User.id (UserId of doctor)
treated_to User.id (UserId of patient)
treatment_status cured/referd
Теперь я хочу найти все остальные пациенты в таблице пользователей, где врач НЕ имеет возможности увидеть пациента
Таким образом, запрос должен выглядеть примерно так:
Select *
from User
where user.id not in (
Select User.id
from TreatmentStatusTable
where treated_by= User.id). <- this the doctor's user.id
, поэтому в основном нужно получить всех пользователей из таблицы. Пользователь, которого доктор еще не видел.
У меня работает приведенный выше запрос. Но я полагаю, что как только размер результата более позднего запроса (2-го запроса) составит несколько тысяч, этот запрос не будет выполнен
Может кто-нибудь предложить мне более эффективный способ запроса этих данных более эффективным способом?