【问题标题】:SQL CASE when using JOIN使用 JOIN 时的 SQL CASE
【发布时间】:2020-09-05 09:46:35
【问题描述】:

我在一个表中有一个新列,我现在需要在该列上加入表。以前的表格是这样的:

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 开始,我不能再加入它,因为这些值包含我无法加入的其他用户参数和新列@引入了 987654325@,它保存了以前在 id 列中使用的值。

我想写一个JOIN 和一个CASE,它将table_a 和table_b 与这样的ide 连接起来:

如果 id id_without_params exists,加入它,如果没有,加入 id

或者也许这也可以:

如果id_without_params 为空,那么id_without_params = id,但我不确定这些如何适合LEFT JOIN CASE

如果值存在,最终目标是在 id_without_params 上加入 table_a 和 table_b,如果不存在,则在 id 上加入。

【问题讨论】:

    标签: mysql join case


    【解决方案1】:

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

    COALESCE() 函数返回列表中的第一个非空值。 https://www.w3schools.com/sql/func_mysql_coalesce.asp

    所以,在你的情况下,你可以使用这样的东西:

    SELECT * FROM table_a
    INNER JOIN table_b
    ON COALESCE(table_a.id_without_params, table_a.id) = table_b.target_column; 
    

    如果table_a.id_without_params 不为NULL,则将在table_a.id_without_paramstable_b.target_column 之间执行JOIN。

    否则,将在table_a.idtable_b.target_column 之间执行JOIN。

    这应该适用于任何类型的 JOIN。

    您可以在这里找到更多方法:https://www.tutorialspoint.com/select-not-null-column-from-two-columns-in-mysql

    【讨论】:

    • 谢谢,你知道它在内存方面的效率吗?
    • 不,我不知道内存效率如何。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-08
    • 2016-04-02
    • 1970-01-01
    • 2018-03-31
    • 2021-06-14
    • 1970-01-01
    相关资源
    最近更新 更多