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 - 如何在点击事件中以编程方式访问子表单列数据