【问题标题】:Access SQL FROM IN and JOINS从 IN 和 JOINS 访问 SQL
【发布时间】:2019-12-01 16:33:35
【问题描述】:

我已经成功使用了

SELECT [field] FROM [Table] IN 'Network Location';

这个问题让我明白了 Access SQL Query from another DB

我的问题是:JOIN 如何适应这个框架

是吗

SELECT [field] 
FROM [Table] IN 'Network Location' 
JOIN [Table2] 
  ON [Table2].field = [Table].field;

SELECT [field]
FROM [Table] 
JOIN [Table2] 
  ON [Table2].field = [Table].field IN 'Network Location' ;

感觉前者是正确的。 SQL 语句应该像句子一样,并且感觉最合适的顺序。

【问题讨论】:

  • 您是否可以同时试用这两个版本,看看哪一个有效?
  • 答案可能不是两个版本,see this SO answer
  • 我必须创建新的独立数据库来进行测试,这不会有问题。从您在那里发布的内容看来,IN 子句只需要遵循外部表即可。这是有道理的。从进一步的答案中,您可以通过将一堆位置/密码信息放入表名所在的括号中来变得非常复杂。
  • 经过测试,是的,我的版本不起作用。 FROM IN 似乎只在它唯一被引用的表时才起作用
  • “SQL 语句应该像句子一样”——不管它应该是什么意思,但它可能会有所帮助,但它是一个死胡同。 “感觉”同上。阅读手册。 PS 请通过编辑而不是 cmets 澄清。

标签: sql ms-access join select


【解决方案1】:

考虑使用方括号或反引号的名称限定符从外部 Access 数据库中查询。从语义上讲,这将遵循其他 RBDMS(例如,Oracle、Postgres、SQL Server、MySQL、SQLite)期间限定符来跨集群、模式、同一机器/服务器上的数据库进行查询。从那里使用表别名在SELECTJOINWHERE 和其他子句中进行引用。

SELECT t1.[field] 
FROM [C:\Path\To\External\myDatabase.accdb].[Table] t1
INNER JOIN [Table2] t2
  ON t2.field = t1.field;

SELECT t1.`field` 
FROM `C:\Path\To\External\myDatabase.accdb`.`Table` t1
INNER JOIN `Table2` t2
  ON t2.field = t1.field;

请注意,Access 要求JOIN 是具体的:INNERLEFTRIGHT


借助 JET/ACE SQL 引擎,您甚至可以以类似的方式查询 Excel 工作簿和 CSV 文件,假设数据在类似表格的范围内是连续的:

SELECT *
FROM [Excel 12.0 Xml;HDR=Yes;Database=C:\Path\To\myWorkbook.xlsx].[SheetName$] AS t;

SELECT t.*
FROM [text;database=C:\Path\To\Folder].myFile.csv AS t;

【讨论】:

  • 是的,我刚刚测试了我的版本。只有当它是唯一被引用的表时,它似乎才有效。你的方法很好用,谢谢
  • 很高兴听到并乐于提供帮助!
猜你喜欢
  • 2011-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多