mysql JOIN ON IF()?

Hai*_*ood 5 mysql sql join

我想尝试使用如下的sql:

SELECT t.*, t2.* FROM templates t
LEFT JOIN IF(t.t_type = 0,'templates_email',
IF(t.t_type = 1,'templates_sms','templates_fax')) t2
ON t.t_id = t2.t_id;
Run Code Online (Sandbox Code Playgroud)

有可能做那样的事吗?

基本上我想根据行中的值加入三个表中的一个.

如果有可能,这是推荐的吗?


更新
所以,

基本上,templates表是包含每个模板必须具有的所有信息的表,例如名称,ID,描述

然后你有templates_x表格,这些表格包含每个模板类型独有的字段.
(有很多并且对于那些不适用的那些具有空字段的单个表是不实际的).

这些表被调用,templates_x但适当的x作为int标志存储在templates表中.

templates_x表和templates表之间的连接是通过t_id.

所以你有什么建议?

OMG*_*ies 4

可以做这样的事情吗?

不,如果不使用动态 SQL 语法(请参阅MySQL 的PreparedStatement 语法),则无法使用动态分配的表(联接或其他方式)。

这种伪查询的非动态重写假设您连接的三个模板表都具有相同的列数和相同的数据类型:

SELECT t.*, 
       te.*
  FROM TEMPLATES t
  JOIN TEMPLATES_EMAIL te ON te.t_id = t.t_id
 WHERE t.t_type = 0
UNION
SELECT t.*, 
       ts.*
  FROM TEMPLATES t
  JOIN TEMPLATES_SMS ts ON ts.t_id = t.t_id
 WHERE t.t_type = 1
UNION
SELECT t.*, 
       tf.*
  FROM TEMPLATES t
  JOIN TEMPLATES_FAX tf ON tf.t_id = t.t_id
 WHERE t.t_type NOT IN (0, 1)
Run Code Online (Sandbox Code Playgroud)