繁体   English   中英

连接具有相同字段的两个表

[英]Join between two tables with same fields

我有这些表:

FT
id|Rif1|Rif2|CodCli|Data1|Data2

FR
id|Rif1|Rif2|Qta|Price

我想使用来自两个表(包含相同值)的 Rif1 和 Rif2 加入从 Codcli 过滤的结果,我这样做:

SELECT FT."Rif1", FR."Rif1", FT."Rif2", FR."Rif2", "Data1", "Data2", "Qta", "Price", "CodCli"
FROM FT, FR
WHERE FT."CodCli" = '653' AND (FT."Rif1" = FR."Rif1" AND FT."Rif2" = FR."Rif2");

但结果是错误的,我想要表 FT 中与过滤后的 Codcli 相关的所有数据,但另外还有来自表 FR 的数据由 Rif1 和 Rif2 相关字段连接。

我想要表 FT 中与过滤后的 Codcli 相关的所有数据

这听起来像一个LEFT JOIN

SELECT FT."Rif1", FR."Rif1", FT."Rif2", FR."Rif2", 
       "Data1", "Data2", "Qta", "Price", "CodCli"
FROM FT LEFT JOIN
     FR
     ON FT."Rif1" = FR."Rif1" AND FT."Rif2" = FR."Rif2"
WHERE FT."CodCli" = '653';

如果这对您有用,请尝试使用 LEFT JOIN:

SELECT FT."Rif1", FR."Rif1", FT."Rif2", FR."Rif2", "Data1", "Data2", "Qta", "Price", "CodCli"
FROM FT LEFT JOIN FR ON FT."Rif1" = FR."Rif1" AND FT."Rif2" = FR."Rif2" where FT."CodCli" = '653';

在您的情况下,postgresql 从第二个表中选择数据,然后使用您的 where 条件从第一个表中获取所有数据。 这样你就会得到错误的结果。 使用left join 在这种情况下,系统从具有条件的第一个表中获取数据,然后加入第二个表。 所以

SELECT FT."Rif1", FR."Rif1", FT."Rif2", FR."Rif2", "Data1", "Data2", "Qta", "Price", "CodCli"
FROM FT
LEFT JOIN FR ON FT."Rif1" = FR."Rif1" AND FT."Rif2" = FR."Rif2"
WHERE FT."CodCli" = '653';

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM