MySql右外连接与Where子句

时间:2018-11-05 14:03:48

标签: mysql sql

我有3张桌子:

pd_tprofessionalpd_tpreferencepd_tprofessional_preference

pd_tprofessionalpd_tpreference具有唯一的ID(分别为fkprofessionalfkpreference)。

pd_tprofessional_preference具有3列:fkpreferencepatientpreference_selectedfkprofessional

我想做的是编写一个查询,该查询将获取所有pd_tpreference,并根据patientpreference_selected是13还是{{1}返回fkprofessional为1或0。 },其中存在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的权限,现在我被困在基于{{1 }},当patientpreference_selected为13且pd_tprofessional_preference时。我真的希望这有道理。

1 个答案:

答案 0 :(得分:3)

  • 常规且易于阅读的方式是使用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