【发布时间】:2022-01-27 16:26:59
【问题描述】:
我遇到了 SQL 请求问题。我不是 SQL 专家,我想了解我的错误。 我的用例是获取第一个表的所有记录 + 第一个表中不存在的第二个表的记录。 我有两张这样的桌子:
第一个表“T-Finance par jalon ZOHO”(有 20 列):
Num_Affaire, Nom_Jalon, Montant, ...
21021287,APD,3000
21021287,APS,5000
21021287,DCE,10000
第二张表“T-Finance par jalon EVERWIN”(20列):
Num_Affaire_GX, Phase_GX, Montant_GX, ...
21021287,APS,5000
21021287,DCE,10000
21021287,ACT,50000
想要的结果是:
Num_Affaire, Phase, Montant, ...
21021287,APD,3000
21021287,APS,5000
21021287,DCE,10000
21021287,ACT,50000
所以我认为完全外部联接是解决方案,但我不知道为什么它不能像参加的那样工作。 我尝试了很多东西,但记录 (21021287, ACT, 50000) 从未出现在最终结果中。
这是我尝试过的请求之一:
SELECT *
FROM "T-Finance par jalon ZOHO" AS zoho
FULL OUTER JOIN "T-Finance par jalon EVERWIN" gx ON gx.Num_Affaire_GX = zoho.Num_Affaire
AND gx.Phase_GX = zoho.Nom_Jalon
WHERE is_startswith(zoho.Nom_Jalon, 'Validation - ') = 0
我也尝试使用 UNION 并且它可以工作,但问题是我不知道如何获取每行的所有其他信息(列)。因为如果我将其他列添加到 SELECT 语句中,UNION 将不会检测到重复:
SELECT
min(mix.Num_Ligne),
mix.Num_Affaire,
mix.Phase
FROM ( SELECT
zoho.Num_Ligne as Num_Ligne,
to_string(zoho.Num_Affaire) as Num_Affaire,
to_string(zoho.Nom_Jalon) as Phase
FROM "T-Finance par jalon ZOHO" AS zoho
UNION
SELECT
gx.Num_Ligne_GX as Num_Ligne,
to_string(gx.Num_Affaire_GX) as Num_Affaire,
to_string(gx.Phase_GX) as Phase
FROM "T-Finance par jalon EVERWIN" gx
) mix
WHERE is_startswith(mix.Phase, 'Validation - ') = 0
GROUP BY 2,
3
感谢您的帮助。
【问题讨论】:
-
每张表的主键是哪一列?
标签: sql database join union zoho