首页 > 解决方案 > 基于列值获取数据的 SQL 查询

问题描述

对于这种情况,是否可以一次尝试获取全部数据?我有这个查询,我需要从另一个表中检索产品名称。

   SELECT T1.CASE_ID, 
       T2.PRODUCT_ID,
       T2.LEVEL,
       (CASE WHEN T2.LEVEL = 3 THEN T3.PARENT_PRODUCT_ID
            WHEN T2.LEVEL = 2 THEN T2.PRODUCT_ID
            WHEN T2.LEVEL = 1 THEN NULL END) AS NEW_PRODUCT_ID,
        T3.PRODUCT_NAME
   FROM TABLE1 T1
   LEFT OUTER JOIN TABLE2 T2
        ON T1.CASE_ID = T2.CASE_ID
   LEFT OUTER JOIN TABLE3 T3
        ON T2.PRODUCT_ID=T3.PRODUCT_ID 

现在基于 T2.PRODUCT_ID 的 T3.PRODUCT_NAME 返回值,但我真正需要的是能够根据 NEW_PRODUCT_ID 的值检索数据?

这是我的预期输出:

在此处输入图像描述

希望这是有道理的。

标签: sql

解决方案


您可以使用子查询

SELECT T4.CASE_ID, T4.PRODUCT_ID, T4.LEVEL, T4.NEW_PRODUCT_ID, T5.PRODUCT_NAME
FROM (
    SELECT T1.CASE_ID, 
       T2.PRODUCT_ID,
       T2.LEVEL,
       (CASE WHEN T2.LEVEL = 3 THEN T3.PARENT_PRODUCT_ID
            WHEN T2.LEVEL = 2 THEN T2.PRODUCT_ID
            WHEN T2.LEVEL = 1 THEN NULL END) AS NEW_PRODUCT_ID,
        T3.PRODUCT_NAME
   FROM TABLE1 T1
   LEFT OUTER JOIN TABLE2 T2
        ON T1.CASE_ID = T2.CASE_ID
   LEFT OUTER JOIN TABLE3 T3
        ON T2.PRODUCT_ID=T3.PRODUCT_ID 
) AS T4
LEFT OUTER JOIN TABLE3 T5
    ON T4.NEW_PRODUCT_ID=T5.PRODUCT_ID

推荐阅读