复合键中的右联接 - Access SQL

Posted

技术标签:

【中文标题】复合键中的右联接 - Access SQL【英文标题】:Right JOIN in composite key - Access SQL 【发布时间】:2020-05-26 16:48:20 【问题描述】:

我尝试查找数据仅在表 B 中可用但此 SQL 代码无法正常工作的行,结果与我们的内部连接相同

 SELECT DISTINCT B.code_localisation, B.nom_poste, B.Batiment, B.Panneau
 FROM A RIGHT JOIN B 
 ON (A.code_localisation = B.code_localisation) AND (A.Panneau = B.Panneau)
 WHERE (A.code_localisation IS NULL AND A.Panneau IS NULL)

【问题讨论】:

请解释“不工作”是什么意思。 我应该只拥有 A 中不存在的 B 记录,其中包含 2 个复合键:Panneau 和 code_localisation。当我这样做时,我找到了内部连接的所有记录。这就像 where 语句不起作用。 【参考方案1】:

我建议NOT EXISTS:

select b.*
from b
where not exists (select 1
                  from a
                  where a.code_localisation = b.code_localisation and
                        a.Panneau = b.Panneau
                 );

这应该等同于您的right join,所以我不能 100% 确定它会解决您的问题。

【讨论】:

还是一样的结果 @H_B 。 . .您认为匹配的键不是。您应该编辑您的问题并提供示例数据和所需的结果。【参考方案2】:

请在连接中使用 where 子句,

SELECT DISTINCT B.code_localisation, B.nom_poste, B.Batiment, B.Panneau
 FROM A RIGHT JOIN B 
 ON (A.code_localisation = B.code_localisation AND A.Panneau = B.Panneau
AND A.code_localisation IS NULL AND A.Panneau IS NULL)

【讨论】:

这是什么..? 在where语句中给表B的key加not null解决 那么在你的问题中你没有提到要使用的条件

以上是关于复合键中的右联接 - Access SQL的主要内容,如果未能解决你的问题,请参考以下文章

在表复合键中增加版本号

在复合键中使用 JoinColumns 时的 TypeDescriptor 错误

问题解决:MySQL 从复合主键中删几个键

Access SQL 中的联接语句

Access 2013 中的联接查询

MS Access 完全外部联接中的莫名行为?