【问题标题】:Right JOIN in composite key - Access SQL复合键中的右联接 - 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 语句不起作用。

标签: sql ms-access join


【解决方案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解决
  • 那么在你的问题中你没有提到要使用的条件
猜你喜欢
  • 2016-12-13
  • 1970-01-01
  • 1970-01-01
  • 2022-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-06
  • 1970-01-01
相关资源
最近更新 更多