Как выбрать значение, не связанное с другим значением? - PullRequest
0 голосов
/ 07 ноября 2019

В одном из вопросов спрашивается, что врачи НЕ лечили. Пациент № 3249. (Подсказка ВЫБРАТЬ ... НЕ ВХОДИТ ...)

В настоящее время у меня есть таблица настроек с physician_id и Patient_no. Я могу выяснить, что врачи работали с пациентом 3249, но я понятия не имею, как выяснить, что врачи не работали с ними. Подсказка гласит: используйте SELECT ... NOT IN ... но я не смог заставить его работать и не нашел в Интернете ничего, что могло бы помочь.

Есть предложения или указатели?

Ответы [ 2 ]

0 голосов
/ 07 ноября 2019

Я был бы склонен использовать group by и having:

select physician_id
from treatments t
group by phsyician_id
having sum(patient_id = 3249) = 0;

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

0 голосов
/ 07 ноября 2019

Give X - это запрос, который дает вам все идентификаторы врачей, которые работали с пациентом, тогда

  SELECT *
  FROM table
  WHERE physician_id not in (x)

даст вам другие.

Вот что означает подсказка.

Конечно, вы также можете использовать левое соединение здесь

  SELECT *
  FROM Table
  LEFT JOIN (x) AS X ON x.physician_id = Table.physician_id
  WHERE x.physician_id is null

, что в некоторых случаях быстрее, чем not in, в зависимости от материала. Оба этих запроса дают одинаковый результат.

...