我有一个看起来像的查询:
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是必需的,因为所有表中都有数据类型备忘录的图像和列。 除了有关性能的问题,谁知道这种语法以及它来自何处?
答案 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