【问题标题】:LEFT JOIN on mismatchesLEFT JOIN 不匹配
【发布时间】:2018-07-24 04:52:43
【问题描述】:

如果我有名为“FILES”的表 1 和名为“Networks”的表 2,并且 FILES.Network_ID 中的值必须来自 Networks.Network_ID 中定义的列表

如果我想运行查询以查明表 1 中 network_id 下是否有表 2 中未定义的任何值,我尝试了以下显然不起作用的方法...另外,我正在使用MS ACCESS 的 SQL 视图

SELECT *
FROM (FILES f LEFT JOIN Networks 
       ON f.Network_ID <> Networks.Network_ID)

【问题讨论】:

  • 更好地创建文件和网络表之间的关系

标签: sql database ms-access


【解决方案1】:

此查询将无法正常工作,因为如果 id 不匹配,您正在尝试加入,因此理想情况下,在进行加入时,行将匹配

例如如果表 Files 包含网络 ID 为 1,2,3 的行,而表 Networks 包含网络 ID 为 1,2,那么在加入时,您将获得网络 ID 为 [1, 2]、[2,1]、[3,1]、[3,2]。

如果您使用子查询然后使用 IN 子句对其进行过滤,则实例将起作用

select * from files where network_id not in (select network_id from networks);

【讨论】:

  • 非常感谢!像魅力一样工作!是的,我在之前的左连接输出中找出了不同配置背后的逻辑。这很有帮助。
【解决方案2】:

试试这个

SELECT *
FROM (FILES f LEFT JOIN Networks 
       ON f.Network_ID =Networks.Network_ID)
      Where Networks.Network_ID Is Null

为确保数据完整性,请在两个表之间创建关系。

【讨论】:

  • Santosh 的关系已经建立,但我仍然可以在 Network_ID 下输入不正确的值?您对此有何看法
  • @WalidMohammed 确保选中Enforce Referential Integrity
  • Santosh,一旦关系已经建立,我如何才能再次访问这个具有参照完整性检查的对话框?
  • 双击加入线。
猜你喜欢
  • 1970-01-01
  • 2013-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-12
  • 1970-01-01
  • 1970-01-01
  • 2012-04-05
相关资源
最近更新 更多