如何在JOIN中使用CASE语句

杰基

我试图使用基于某些case语句而有所不同的join语句。当字段lane.dest_postal_code_prefix不为NULL时,我希望联接像下面的第一段代码一样。当field lane.dest_postal_code_prefix为NULL时,我希望联接像下面的第二个代码块一样。(请注意两种情况下ON条件的差异)

我需要一些帮助,将case语句添加到join子句中。

--WHEN lane.dest_postal_code_prefix is NOT NULL
SELECT * FROM big_bucket_bridge A
    LEFT JOIN lane 
    ON
    (
    A.customer_country = lane.dest_country_code
    AND
    SUBSTRING( A.ddm_zip, 1, LENGTH( lane.dest_postal_code_prefix ) ) = 
    lane.dest_postal_code_prefix
        )

WHERE  
    snapshot_day between '2019-06-23'-22 and '2019-06-23'
    AND (is_before_cutoff_g OR (is_before_cutoff_opt_g and not under_two))
    AND row_n =1
;

--WHEN lane.dest_postal_code_prefix is NULL
SELECT * FROM big_bucket_bridge A
    LEFT JOIN lane 
    ON
    (
    A.customer_country = lane.dest_country_code
    )

WHERE  
    snapshot_day between '2019-06-23'-22 and '2019-06-23'
    AND (is_before_cutoff_g OR (is_before_cutoff_opt_g and not under_two))
    AND row_n =1
;
福帕斯

您可以这样使用一个ON子句:

ON
(
A.customer_country = lane.dest_country_code
AND
COALESCE(SUBSTRING(A.ddm_zip, 1, LENGTH( lane.dest_postal_code_prefix )), '') = CASE 
  WHEN lane.dest_postal_code_prefix IS NOT NULL THEN lane.dest_postal_code_prefix 
  ELSE COALESCE(SUBSTRING(A.ddm_zip, 1, LENGTH( lane.dest_postal_code_prefix )), '')
END
)

在第二种情况下(其他部分),该条件始终为真,因为它是:

COALESCE(SUBSTRING(A.ddm_zip, 1, LENGTH( lane.dest_postal_code_prefix )), '') = COALESCE(SUBSTRING(A.ddm_zip, 1, LENGTH( lane.dest_postal_code_prefix )), '')

所以唯一的实际情况是

A.customer_country = lane.dest_country_code

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在 CASE 语句中使用 IF

如何在SQL Server中使用CASE语句

如何在 SQL 查询中使用 case 语句?

如何在make shell命令中使用case语句?

如何在 case 语句中使用 group by

如何在带有IN子句的WHERE中使用CASE语句?

如何在 case 语句的 when 条件中使用变量

如何在Dart中使用Switch Case语句

如何在SQLServer存储过程中使用case语句

如何在 postgres 函数中使用 CASE 返回 Select 语句?

如何在WHERE子句中使用CASE / IF语句?

SQL 语句 - 如何在不同的 SELECT 中使用多个 CASE?

如何在CASE语句中使用“ BETWEEN”

如何在选择查询中使用case语句设置值?

如何在 MongoDB 中使用 CASE 语句 WHERE CONDITION

如何在bash case语句中使用条件构造?

如何在Rails中使用嵌套JSON编写case语句

如何在具有 CASE 语句的 SQL 中使用 PreparedStatement

如何在 Select case 参数中使用 if 语句

MySQL-如何在JOIN中使用COUNT()语句

如何在SQL Server中使用JOIN执行UPDATE语句?

如何在UPDATE语句中使用INNER JOIN?

如何在While语句中使用Join?

如何在JOIN表中使用SQL CASE和COUNT

如何在case语句中使用优先值或在函数中的sql语句中的case语句中设置变量

如何在sql和php中的“ SELECT DISTINCT CASE WHEN”语句中使用“ ORDER BY”语句?

如何根据条件在JOIN语句中使用CASE联接两个表?

如何在使用JavaScript的switch case语句中使用范围?

如何在case语句中使用函数调用而不多次调用函数