将计算列与其未计算版本连接起来以显示具有名称的另一列

Joining computed column with its uncomputed version to show another column with a name

我不太确定怎么说,让我举个简单的例子。我有 3 个包含以下列的表:

table1
ID_TRANSACTION
ID_PRODUCT
SALES_DATA

table2
ID_PRODUCT
PRODUCT_DATA
ID_CATEGORY

table3
ID_CATEGORY
NAME_CATEGORY
CODE_CATEGORY
LEVEL

表2中的类别有不同的级别,每个级别增加三个额外的数字。所以第一级 1 以 '001' 开头,第二级有六个 '001001' 第三级 '001001001' 等等。我需要的是一个查询,它会给我 SALES_DATA、PRODUCT DATA 和 NAME_CATEGORY 来自级别 2,即使产品处于更高级别。假设产品有 CODE_CATEGORY 002005021,我需要 002005 的 NAME_CATEGORY,而不是完整 002005021 的 NAME_CATEGORY。我知道如何提取这些数字:

SUBSTRING(tree.KOD_TREE,1,6)

但是如何让它显示与 6 位数字 CODE_CATEGORY 相关联的 NAME_CATEGORY 而不是其 9 位数字?

没有它的代码看起来像:

SELECT
table1.SALES_DATA
table2.PRODUCT_DATA
table3.NAME_CATEGORY
LVL2_NAME_CATEGORY /* (here I would put the NAME_CATEGORY from lower level) */

FROM
db.table1
INNER JOIN db.table2 ON table1.ID_PRODUCT = table2.ID_PRODUCT
INNER JOIN db.table3 ON table2.ID_CATEGORY = table3.ID_CATEGORY

考虑使用 SUBSTRING() 值在表 3 self join 上的 LEFT JOIN

SELECT 
       table1.SALES_DATA,
       table2.PRODUCT_DATA,
       table3.NAME_CATEGORY,
       levelsub.NAME_CATEGORY AS LOWER_LEVEL_CATEGORY

FROM db.table1 
INNER JOIN db.table2 ON table1.ID_PRODUCT = table2.ID_PRODUCT 
INNER JOIN db.table3 ON table2.ID_CATEGORY = table3.ID_CATEGORY
LEFT JOIN db.table3 AS levelsub 
       ON levelsub.CODE_CATEGORY = SUBSTRING(table3.CODE_CATEGORY,1,6)