如何在此 table 上使用自联接而不是在进行串联时使用子查询?

How to use a self join on this table instead of the subquery being used when a concatenation is taking place?

我有以下查询

Select DISTINCT a.code,a.Code_group,a.value,a.code_auth FROM AEO.CODE_CM a WHERE a.CODE_GROUP IN 
(SELECT CONCAT (b.code,'_PART') FROM AEO.CODE_CM b WHERE b.CODE_GROUP ='EPE_AUTHTYPE');

因此,根据接收到的 code_group 值,它会选择每个代码并将字符串连接到它,returns 将其作为 code_group。我需要避免使用子查询来降低它的复杂性,因为它是相同的 table 我尝试使用 self join as

Select DISTINCT a.code,a.Code_group,a.value,a.code_auth FROM AEO.CODE_CM a INNER JOIN  AEO.CODE_CM b 
ON a.code_group =b.code_group WHERE a.code_group = CONCAT(b.code,'_PART') AND b.code_group ='EPE_AUTHTYPE';

但在这种情况下我得到的结果是空白

查询不等价,因为您在第二个查询中有错误的附加 a.code_group = b.code_group 谓词。
它应该是这样的:

WITH AEO_CODE_CM (CODE, CODE_GROUP) AS
(
VALUES 
  ('code1', 'EPE_AUTHTYPE')
, ('code2', 'code1_PART')
)

Select DISTINCT a.code, a.Code_group 
FROM AEO_CODE_CM a
/* 
WHERE a.CODE_GROUP IN 
(
SELECT CONCAT (b.code,'_PART') 
FROM AEO_CODE_CM b 
WHERE b.CODE_GROUP ='EPE_AUTHTYPE'
)
*/
--/*
JOIN AEO_CODE_CM b ON a.code_group = CONCAT(b.code,'_PART') 
WHERE b.code_group ='EPE_AUTHTYPE'
--*/
;