Mysql 使用联接时的SQL实例

Mysql 使用联接时的SQL实例,mysql,join,case,Mysql,Join,Case,我在一个表中有一个新列,现在我需要在该列上联接表。以前,该表如下所示: date id 05-18 abc 05-18 abc 05-18 cde 05-18 gtf 现在,引入了一个新的专栏: date id id_without_params 05-18 abc 05-18 a

我在一个表中有一个新列,现在我需要在该列上联接表。以前,该表如下所示:

date        id            
05-18       abc       
05-18       abc        
05-18       cde        
05-18       gtf 
现在,引入了一个新的专栏:

date        id              id_without_params   
05-18       abc      
05-18       abc      
05-18       cde      
05-18       gtf              
05-19       abc123626        abc
05-19       cde345634        cde
05-19       gtf437437        gtf
以前我加入了
id
列上的表,现在该列有了新值,启动
05-19
,我无法再加入,因为这些值包含我无法加入的其他用户参数,并且引入了新列
id\u,其中包含以前在
id
列中使用的值

我想用一个
CASE
编写一个
连接
,它将表a和表b与ide连接起来,如下所示:

date        id            
05-18       abc       
05-18       abc        
05-18       cde        
05-18       gtf 
如果存在没有参数的id
id\u
,则加入它,如果不存在,则加入
id

或者也可以这样做:

如果不带参数的
id\u
为空,则不带参数的
id\u
=
id
,但我不确定这两者如何适用于
左连接情况


最终目标是在没有参数的情况下连接id_上的表a和表b(如果值存在),如果没有,则在id上连接它。

有几种方法可以实现这一点。最简单的方法可能是使用
COALESCE
函数

COALESCE()
函数返回列表中的第一个非空值

因此,在您的情况下,您可以使用以下内容:

date        id            
05-18       abc       
05-18       abc        
05-18       cde        
05-18       gtf 
从表a中选择*
内部联接表
合并时(不带参数的表a.id,表a.id)=表b.target列;
如果
table_a.id_unch_params
不为空,则将在
table_a.id_unch_params
table_b.target_列之间执行联接

否则,将在
表a.id
表b.target\u列之间执行联接

这应该适用于任何类型的联接


你可以在这里找到更多的方法:

谢谢,你知道它在内存方面的效率吗?不,我不知道它在内存方面的效率有多高。