MySql Right Outer Соединение с пунктом «Где» - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть 3 таблицы:

pd_tprofessional, pd_tpreference и pd_tprofessional_preference.

pd_tprofessional и pd_tpreference имеют уникальный идентификатор (fkprofessional и fkpreference соответственно).

pd_tprofessional_preference имеет 3 столбца: fkpreference, patientpreference_selected, fkprofessional

Я пытаюсь написать запрос, который получит все pd_tpreference и вернет patientpreference_selected как 1 или 0, если fkprofessional равно 13 и pd_tprofessional_preference с этим fkprofessional.

Вот что я получил до сих пор:

SELECT patientpreference_selected, fkprofessional, pkpreference, preference_name 
FROM pd_tprofessional_preference 
     RIGHT OUTER JOIN pd_tpreference 
     ON pd_tpreference.pkpreference = pd_tprofessional_preference.fkpreference

Этот запрос дает мне все pd_tpreference по правому внешнему, соединяя их с pd_tprofessional_preference, теперь я застрял при возвращении patientpreference_selected как 1 или 0, если эта запись существует в pd_tprofessional_preference, когда fkprofessional 13 с fkpreference. Я действительно надеюсь, что это имеет смысл.

1 Ответ

0 голосов
/ 05 ноября 2018
  • Обычным и легко читаемым способом является использование Left Join. Вы можете выполнить левое соединение из таблицы pd_tpreference к таблице pd_tprofessional_preference.
  • В условии соединения ON укажите условие fkprofessional = 13.
  • Вы можете использовать функцию Coalesce() для обработки случая, когда в таблице pd_tprofessional_preference не найдено совпадений.
  • В многостоловых запросах рекомендуется использовать псевдонимы для ясности кода и избежания неоднозначного поведения.

Попробуйте следующее:

SELECT 
  pref_t.fkpreference, 
  pref_t.preference_name, 
  map_t.fkprofessional, 
  COALESCE(map_t.patientpreference_selected, 0) AS patientpreference_selected
FROM pd_tpreference AS pref_t
LEFT JOIN pd_tprofessional_preference AS map_t
  ON map_t.fkpreference = pref_t.fkpreference AND 
     map_t.fkprofessional = 13 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...