首页 > 解决方案 > 选择是否加入一张表 否则加入另一张表

问题描述

有3张桌子。让我们称它们为 a、b 和 c。根据表 a 中一个单元格的值,从表 a 中选择的数据必须与 b 或 c 相交。让我们称这个单元格为 d。MySQL中有没有办法进行如下查询:

SELECT
  a.cell,
  a.other_cell,
  a.d,
  alias.cell,
  alias.other_cell if(
    a.d = 3,
    left join b as alias on b.id = a.id,
    left join c as alias on c.id = a.id
  )
FROM
  a where a.id = 123

标签: mysql

解决方案


您可以尝试例如Conditional join as here但改为coalesce使用CASE WHEN

简而言之:

相反,您只需 LEFT OUTER JOIN 到两个表,并在您的 SELECT 子句中,从匹配的那个返回数据

select
  E.EmployeeName,
  CASE
    WHEN d = 3 THEN s.store
    WHEN d <>3 THEN o.office
  END as Location
from
  Employees E
left outer join
  Stores S on …
left outer join
  Offices O on …

注意我认为这两列必须具有相同的类型,至少在 中PG,不确定MYSQL


推荐阅读