我有两个表:
TableA
,其中包含所有产品的说明:
codeProduct description
1 ok
2 yes
TableB
仅包含具有以下代码的产品之间的层次结构:
level_1 level_2 level_3 level_4
1 2 23 75
1 2 53 85
我如何获得包含每个级别描述的最终表
level_1 description_1 level_2 description_2 level_3 description_3 level_4 description_4
答案 0 :(得分:2)
每次需要tableB中的列的值时,都需要多次使用tableA
select b.level_1
, a1.description description_1
, b.level_2
, a2.description description_2
, b.level_3
, a3.description description_3
, b.level_4
, a4.description description_4
from TableB b
left join TableA a1 on a1.codeProduct = b.level_1
left join TableA a2 on a2.codeProduct = b.level_2
left join TableA a3 on a3.codeProduct = b.level_3
left join TableA a4 on a4.codeProduct = b.level_4
如果两个表之间的值都不匹配,则使用左连接;如果您拥有所有的值,则使用INNER JOIN
select b.level_1
, a1.description description_1
, b.level_2
, a2.description description_2
, b.level_3
, a3.description description_3
, b.level_4
, a4.description description_4
from TableB b
INNER join TableA a1 on a1.codeProduct = b.level_1
INNER join TableA a2 on a2.codeProduct = b.level_2
INNER join TableA a3 on a3.codeProduct = b.level_3
INNER join TableA a4 on a4.codeProduct = b.level_4
答案 1 :(得分:2)
尝试一下:
CREATE TABLE #TABLEA
(
CODEPRODUCT INT NOT NULL
, DESCRIPTION VARCHAR (100) NOT NULL
);
INSERT INTO #TABLEA VALUES (1, 'ok') ;
INSERT INTO #TABLEA VALUES (2, 'yes');
CREATE TABLE #TABLEB
(
LEVEL_1 INT NOT NULL
, LEVEL_2 INT NOT NULL
, LEVEL_3 INT NOT NULL
, LEVEL_4 INT NOT NULL
);
INSERT INTO #TABLEB VALUES(1, 2, 23, 75) , (1, 2, 53, 85);
SELECT #TABLEB.LEVEL_1
, TA_L1.DESCRIPTION AS DESCRIPTION1
, #TABLEB.LEVEL_2
, TA_L2.DESCRIPTION AS DESCRIPTION2
, #TABLEB.LEVEL_3
, TA_L3.DESCRIPTION AS DESCRIPTION3
, #TABLEB.LEVEL_4
, TA_L4.DESCRIPTION AS DESCRIPTION4
FROM #TABLEB
LEFT JOIN #TABLEA TA_L1
ON #TABLEB.LEVEL_1 = TA_L1.CODEPRODUCT
LEFT JOIN #TABLEA TA_L2
ON #TABLEB.LEVEL_2 = TA_L2.CODEPRODUCT
LEFT JOIN #TABLEA TA_L3
ON #TABLEB.LEVEL_3 = TA_L3.CODEPRODUCT
LEFT JOIN #TABLEA TA_L4
ON #TABLEB.LEVEL_4 = TA_L4.CODEPRODUCT;
结果:
LEVEL_1, DESCRIPTION1, LEVEL_2, DESCRIPTION2, LEVEL_3, DESCRIPTION3, LEVEL_4, DESCRIPTION4
1 ok 2 yes 23 NULL 75 NULL
1 ok 2 yes 53 NULL 85 NULL