MS Access 2007 语法:From Join Join Join Where

Posted

技术标签:

【中文标题】MS Access 2007 语法:From Join Join Join Where【英文标题】:MS Access 2007 syntax: From Join Join Join Where 【发布时间】:2016-03-01 21:14:50 【问题描述】:

我在 Access 2007 中工作,我使用 SQL 比使用 Access 更舒服。在阅读了该站点上与 MS Access 中的连接相关的几个线程后,我认为我这样做是正确的,但有人告诉我我的 where 子句有语法错误。这是新的改进版:

FROM (( Patron P
    INNER JOIN Patron_Address PA1 ON
    (PA1.patron_id = P.patron_id)
     LEFT JOIN Patron_Address PA2 ON
      (PA2.patron_id = P.patron_id)     
     LEFT JOIN Patron_Address PA3 ONL
      (PA3.patron_id = P.patron_id) 
  where PA1.address_type = '1'AND
        PA2.address_type = '2' AND
         PA3.address_type = '3';

让我解释一下我的目标。 赞助人元组有 1-3 个赞助人地址元组。 这些地址行有三种类型:

    永久 临时的 电子邮件

还有,

一个读者必须有一个地址类型 1 的读者地址行 一个读者可能有一个地址类型 2 的读者地址行 一个读者可能有一个地址类型 3 的读者地址行

我需要获取每个patron_id 的所有地址行的地址信息。来自每个地址行的数据需要进入 lare 查询结果集中的列,然后我需要将其转换为制表符分隔的文件以发送给供应商。

这就是我要加入的原因,也是我需要使用标准的原因。 从逻辑上讲,每个连接的结果都应该有自己的 where 子句,但这显然是不允许的。所以我有一个 where 子句列出了三个条件。问题在于,三个条件中只有一个适用于每个连接。

那么我需要在概念上和句法上做什么才能得到我想要的结果?感谢最近几天对这个怪物的帮助。我快接近了,我想。再说一次,我可能只是移动了我的错误。

【问题讨论】:

我已经使 SQL 渲染得更好一些,但它可能仍然与正在整理的缩进有关。使用预览工具并确保您的问题看起来不错可能有助于获得答案。 我使用 SQL 比使用 Access 更舒服...考虑到 Access 运行 SQL,一种特殊用途的声明性编程语言,这很有趣。 【参考方案1】:

您能否尝试以下查询:-

 FROM Patron P 
 INNER JOIN Patron_Address PA1 ON PA1.patron_id = P.patron_id)
 LEFT JOIN Patron_Address PA2 ON PA2.patron_id = P.patron_id
LEFT JOIN Patron_Address PA3 ON PA3.patron_id = P.patron_id
where PA1.address_type = '1'
AND PA2.address_type = '2' 
AND PA3.address_type = '3';

从技术上讲,我删除了最后一个“ON”上的所有括号和字母“L”。您输入的是“ONL”而不是“ON”

【讨论】:

在格式化代码块时,我不知道 LEFT 中的 L 去了哪里。您的 from 子句版本产生了“From 中的语法错误”。我在第一个表之前添加了一个 (,现在它在下一个 JOIN:FROM (Patron P INNER JOIN Patron_Address PA1 ON PA1.patron_id = P.patron_id) LEFT JOIN Patron_Address PA2 ON PA2.patron_id = P 上给我一个错误。左加入 Patron_Address PA3 PA3.patron_id = P.patron_id 其中 PA1.address_type = '1' AND PA2.address_type = '2' AND PA3.address_type = '3'; 我也为第二次加入添加了括号,目前我没有收到来自 Access 的关于加入的投诉。现在它抱怨第一列“选择 PATRON.TITLE”,因为它要求我输入一个 TITLE。它应该选择不要求输入。所以我不知道我现在做错了什么。完整的查询太长,无法放入评论,所以我不知道如何显示它。 这是我的 FROM 子句,目前没有出现错误:FROM ((Patron P INNER JOIN Patron_Address PA1 ON PA1.patron_id = P.patron_id) LEFT JOIN Patron_Address PA2 ON PA2.patron_id = P. papron_id) 左加入 Patron_Address PA3 ON PA3.patron_id = P.patron_id FROM 子句是否让 Access 认为应该只有一行,句号?如果我尝试运行查询,它会询问参数 PATRON.TITLE 的值: select PATRON.TITLE, PATRON.FIRST_NAME, PATRON.MIDDLE_NAME, PATRON.LAST_NAME, ' ', ' ', ' ', ' ', ' 5692',PATRON.BARCODE,'', 我在这方面做了更多的工作。我发现 MS Access 2007 无法将子查询作为字段处理。真可惜。所以我不得不让我的 from 子句更加复杂。现在它可以工作但只返回大约 20 行而不是数千行:SELECT P.patron_id, PB.patron_barcode, PA1.city FROM (((PATRON P INNER JOIN PATRON_BARCODE PB ON P.PATRON_ID = PB.PATRON_ID) INNER JOIN PATRON_ADDRESS PA1 ON PB .PATRON_ID = PA1.PATRON_ID) LEFT JOIN Patron_Address PA2 ON PA2.patron_id = P.patron_id) LEFT JOIN Patron_Address PA3 ON PA3.patron_id = P.patron_id 其中与以前相同。

以上是关于MS Access 2007 语法:From Join Join Join Where的主要内容,如果未能解决你的问题,请参考以下文章

尝试连接到 SQL 表时,MS Access 2007 中的查询错误

MS-Access 2007 - 如何在点击事件中以编程方式访问子表单列数据

插入查询中发生语法错误(MS Access)

MS Access 2013 运行时间 [currentProject].[istrusted] 语法

MS Access SQL 语法错误

ms-access 2007 年报告