sql - mysql 在 IF() 上加入?

标签 sql mysql 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;

有没有可能做这样的事情?

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

如果可能,是否推荐这样做?


更新
所以,

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

然后您就有了 templates_x 表,这些表包含每个模板类型所特有的字段。
(有很多,对于那些不适用的字段,使用一个包含空字段的表是不切实际的)。

这些表称为 templates_x,但是适当的 x 作为 int 标志存储在模板表中。

templates_x 表和 templates 表之间的连接是通过 t_id 实现的。

那你有什么建议呢?

最佳答案

有没有可能做这样的事情?

不,如果不使用动态 SQL 语法(参见 MySQL's PreparedStatement syntax),您不能使用动态分配的表(连接或其他方式)。

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

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)

关于sql - mysql 在 IF() 上加入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3808689/

相关文章:

mysql - 在 MAMP 堆栈上运行的 CodeIgniter 中没有选择数据库错误

php - CakePHP:加入操作不起作用

php - SQL 到 ActiveRecord 条件

php - 如何统计没有患者预约的医生?

php - Laravel 中的多提供商关系用户表

mysql - 如何编写这个复杂的自连接

mysql - 在 MySQL 中执行 'time similarity' 连接

java - 在 Android 应用程序中使用 Json

MySQL - 临时表列名称上的 GROUP_CONCAT()?

java - 如何知道 Hibernate 中原生 SQL 查询结果的类型?