SQL 当连接没有结果时插入空值

SQL insert null value when join delivers no result

我有三张表

articleoffer_test_u
   id | randomId    | articleOfferId | TestBegin  | ArticleId
   1  | 12345678    | 38             | 2021-12-08 | 74        
   2  | 12345679    | 1              | 2021-12-08 | 1        
   3  | 12345677    | 1              | 2021-12-08 | 1        

articleoffer_feature_test_u
   ArticleOfferTestId | FeatureId     
   1                  | EXAMPLE1       
   1                  | EXAMPLE2             
   1                  | EXAMPLE3     
   2                  | EXAMPLE1        
   2                  | EXAMPLE3              
   3                  | EXAMPLE3        
   3                  | EXAMPLE2        

featurealias
   Id | FeatureId      | ArticleShortName | FeatureAlias
   1  | EXAMPLE1       | ART1             | EXAMPLE1_E 
   2  | EXAMPLE1       | ART2             | EXAMPLE1_J
   2  | EXAMPLE2       | ART1             | EXAMPLE2_E  

               

我使用这个查询

SELECT amtu.FeatureId, ptu.testBegin
    FROM articleoffer_test_u ptu, articleoffer_feature_test_u amtu
    WHERE ptu.RandomId="12345678" AND ptu.ArticleId=74 AND ptu.articleOfferId=38
    AND ptu.id=amtu.ArticleofferTestId AND amtu.FeatureId IN ("EXAMPLE1", "EXAMPLE2", "EXAMPLE3")

并得到这个结果

 FeatureId      | TestBegin
 EXAMPLE1       | 2021-12-08 
 EXAMPLE2       | 2021-12-08
 EXAMPLE3       | 2021-12-08    

我想要的是这样的结果

 FeatureId      | FeatureAlias   | TestBegin
 EXAMPLE1       | EXAMPLE1_E     | 2021-12-08
 EXAMPLE2       | EXAMPLE2_E     | 2021-12-08
 EXAMPLE3       | NULL           | 2021-12-08

我试过这个查询

SELECT amtu.FeatureId, ptu.testBegin, featureAlias.FeatureAlias
    FROM articleoffer_test_u ptu, articleoffer_feature_test_u amtu
    INNER JOIN featureAlias ON featureAlias.FeatureId = amtu.FeatureId AND featureAlias.ArticleShortName = "ART1"
    WHERE ptu.RandomId="12345678" AND ptu.ArticleId=74 AND ptu.articleOfferId=38
    AND ptu.id=amtu.ArticleofferTestId AND amtu.FeatureId IN ("EXAMPLE1", "EXAMPLE2", "EXAMPLE3");

并得到缺少 EXAMPLE3 的结果

 FeatureId      | FeatureAlias   | TestBegin
 EXAMPLE1       | EXAMPLE1_E     | 2021-12-08
 EXAMPLE2       | EXAMPLE2_E     | 2021-12-08

这是因为 EXAMPLE3 没有 featureAlias。是否有可能使用连接并为 featureAlias 值插入空值?如果不是,有谁知道解决问题的不同方法吗?

Left Join 会自动执行此操作:

SELECT amtu.FeatureId,
       ptu.testBegin,
       featureAlias.FeatureAlias
FROM   articleoffer_test_u ptu
       INNER JOIN articleoffer_feature_test_u amtu
               ON ptu.id = amtu.ArticleofferTestId
       LEFT JOIN featureAlias
              ON featureAlias.FeatureId = amtu.FeatureId
                 AND featureAlias.ArticleShortName = 'EXMP1'
WHERE  ptu.RandomId = '12345678'
       AND ptu.ArticleId = 74
       AND ptu.articleOfferId = 38
       AND amtu.FeatureId IN ( 'EXAMPLE1', 'EXAMPLE2', 'EXAMPLE3' );