【发布时间】:2022-01-15 05:02:22
【问题描述】:
我有三张桌子
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 值插入 null?如果没有,有没有人知道解决问题的不同方法?
【问题讨论】:
-
我可以建议 LEFT JOIN 吗?
-
真的那么简单吗?我刚试过,它是。谢谢! :D
-
今日提示:随处切换到现代、明确的
JOIN语法。更容易编写(没有错误),更容易阅读(和维护),并且如果需要更容易转换为外连接。
标签: mysql sql inner-join