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' );
我有三张表
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' );