Mysql 如何基于值连接不同的表

Mysql 如何基于值连接不同的表,mysql,join,Mysql,Join,我有4个表…父表是d_checkupinfo,我想根据checkupinfo.move_类型列值将其与checkup或surgery或medicaleq联接…如果它的值为1,则与checkup table联接,如果值为2,则与surgery联接,如果值为3,则与medicaleq联接。 那么如何做到这一点呢 SELECT d_checkupinfo.*, d_branch.*, d_checkup.* , d_surgery.* , d_medicaleq.* , d_p

我有4个表…父表是d_checkupinfo,我想根据checkupinfo.move_类型列值将其与checkup或surgery或medicaleq联接…如果它的值为1,则与checkup table联接,如果值为2,则与surgery联接,如果值为3,则与medicaleq联接。 那么如何做到这一点呢

SELECT
  d_checkupinfo.*,
  d_branch.*,
  d_checkup.* ,
  d_surgery.* ,
  d_medicaleq.* ,
  d_patient.*
FROM d_checkupinfo
  LEFT JOIN d_branch WHERE d_checkupinfo.chi_branch_id = d_branch.branch_id
  LEFT JOIN d_patient WHERE d_checkupinfo.chi_pi_num = d_patient.pi_id
  LEFT JOIN d_checkup WHERE d_checkupinfo.chi_type_id = d_checkup.checkup_id AND move_type = 1
  LEFT JOIN d_surgery WHERE d_checkupinfo.chi_type_id = d_surgery.surgery_id AND move_type = 2
  LEFT JOIN d_medicaleq WHERE d_checkupinfo.chi_type_id = d_medicaleq.medicaleq_id AND move_type = 3

没有数据集我不能确定,但我怀疑如果您将内部联接更改为左联接,并将子句更改为ON,而不是联接中的WHERE,那么您发布的查询将起作用。如果需要将结果缩减为d_checkup/d_surgery/d_medicaleq中存在的结果,可以添加where子句,即d_checkup.column不为null或d_surgery.column不为null或d_medicaleq.column不为null您忘记了每个连接的ON。。WHERE未启用,并且每个SELECT只能有一个WHERE子句。您应该阅读并报告的MySQL错误将说明同样多的内容,可能更多。更改它仍然不起作用您忘记了ONs。。每个SELECT只能有一个WHERE子句。。您应该阅读并报告的MySQL错误将说明同样多的内容-左连接需要使用的连接条件,实际上应该为内部连接指定,因为这只是MySQL的一个怪癖,允许它是可选的。
SELECT
  d_checkupinfo.*,
  d_branch.*,
  d_checkup.* ,
  d_patient.*
FROM d_checkupinfo
  LEFT JOIN d_branch ON d_checkupinfo.chi_branch_id = d_branch.branch_id 
  LEFT JOIN d_patient ON d_checkupinfo.chi_pi_num = d_patient.pi_id 
  LEFT JOIN d_checkup ON d_checkupinfo.chi_type_id = d_checkup.checkup_id WHERE move_type = 1
UNION ALL
SELECT
  d_checkupinfo.*,
  d_branch.*,
  d_surgery.* ,
  d_patient.*
FROM d_checkupinfo
  LEFT JOIN d_branch ON d_checkupinfo.chi_branch_id = d_branch.branch_id
  LEFT JOIN d_patient ON d_checkupinfo.chi_pi_num = d_patient.pi_id
  LEFT JOIN d_surgery on d_checkupinfo.chi_type_id = d_surgery.surgery_id WHERE move_type = 2
UNION ALL
SELECT
  d_checkupinfo.*,
  d_branch.*,
  d_medicaleq.* ,
  d_patient.*
FROM d_checkupinfo
  LEFT JOIN d_branch ON d_checkupinfo.chi_branch_id = d_branch.branch_id
  LEFT JOIN d_patient ON d_checkupinfo.chi_pi_num = d_patient.pi_id
  LEFT JOIN d_medicaleq on d_checkupinfo.chi_type_id = d_medicaleq.medicaleq_id WHERE move_type = 3