ms-access查询语法

时间:2011-03-13 15:27:41

标签: sql ms-access-2003

我有一个看起来像的查询:

select distinctrow company.* from company, contact, address, company 
  left join address on company.com_uid = address.com_uid, company 
  left join contact on company.com_uid = contact.com_uid

它是应用程序内部的基本查询,在用户输入时动态设置where子句,例如:

where contact.function like 'C*'

where address.state = 'de'

此查询显示所有相关公司。应用程序变化很小,无法显示搜索到的联系人:

select distinctrow contacts.* from company, contact, address, company 
  left join address on company.com_uid = address.com_uid, company 
  left join contact on company.com_uid = contact.com_uid

或搜索到的地址:

select distinctrow address.* from company, contact, address, company 
  left join address on company.com_uid = address.com_uid, company 
  left join contact on company.com_uid = contact.com_uid

DISTINCTROW是必需的,因为所有表中都有数据类型备忘录的图像和列。 除了有关性能的问题,谁知道这种语法以及它来自何处?

3 个答案:

答案 0 :(得分:2)

如果我理解你的问题,你会问为什么Access的SQL语法风格与SQL Server不同。

Access和其他几种Microsoft产品使用Microsoft Jet Database Engine

正如您所注意到的,在这种SQL风格和您通常习惯在T-SQL中看到的内容之间可能会有一些frustrating differences

除差异列表外,此reference for Microsoft Jet in Access 2003可能对您有所帮助。

答案 1 :(得分:1)

Access数据库引擎(Jet,ACE,等等)没有实现SQL-92语法;见Outer Join with WHERE Clause Returns Unexpected Records

有关更多详细信息,请参阅this Joe Celko newsgroup thread

  

是的,ACCESS像往常一样出了问题。   他们知道这件事。我接到了电话   在这一个作为顾问,到   提供SQL-92的引用   标准。喷气发动机gorup想要   修复解析器,但一些   Microsoft的产品组有代码   这取决于这些错误。你看   谁赢了。

如果您愿意,我可以提供有关DISTINCTROW灾难的类似文章;)

答案 2 :(得分:0)

DISTINCT与DISTINCTROW

本文专为正在学习Access的人而设计,而不是已经熟悉SQL的人。但这是一个很好的解释来自任何一个有利位置。

http://www.fmsinc.com/microsoftaccess/query/distinct_vs_distinctrow/unique_values_records.asp