Mysql 选择是否联接一个表或联接其他表

Mysql 选择是否联接一个表或联接其他表,mysql,Mysql,有三张桌子。我们把它们叫做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

有三张桌子。我们把它们叫做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
例如,您可以尝试使用
合并
,但在

简言之:

相反,您只需将外部联接保留到两个表,并在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 …
选择
E.雇员姓名,
案例
当d=3时,则s存储
当d 3时,然后是o办公室
结束位置
从…起
雇员
左外连接
在…
左外连接
在…上的办公室…

注意:我认为这两个列必须具有相同的类型,至少在
PG
中是这样,如果您希望根据 表
a
那么像这样的工作可能适合你

SELECT
  a.cell,
  a.other_cell,
  a.d,
  if(a.d = 3, b.cell, c.cell) cell
FROM a
INNER JOIN b on b.id = a.id 
INNER JOIN c on c.id = a.id 
WHERE a.id = 123
这应该将
b
c
中提供的id与表
a
中的id匹配的所有3个表连接起来。
if
功能将根据表
a
中的
d
列的值,从表
b
c
中选择
单元格

还有帮助: