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
如果存在没有参数的idid\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列之间执行联接
这应该适用于任何类型的联接
你可以在这里找到更多的方法:谢谢,你知道它在内存方面的效率吗?不,我不知道它在内存方面的效率有多高。