Access有多个Inner Join时,要用括号括起来

例如:

Select * from Student s Inner Join SC  t On S.id = t.sid Inner Join course c  On c.cid = t.cid Where c.cName = 'C#'

这样在access里是无法通过的,在sqlserver是没点问题的,

因为此处有多个inner jion,所以用括号分隔,这样写就可以通过了:

Select * from (Student s Inner Join sc t On S.id = t.sid) Inner Join course c  On c.cid = t.cid Where c.cName = 'C#'

 

一下内容来自网上搜的:

 

ACCESS不能用内连接 inner join

access同时INNER   JOIN   3个表是肯定没问题的,出错的原因是执行顺序!前几天我也遇到这个问题,需要加()来确定执行顺序!
select   a.xno,a.score,b.address,c.type   from   ((table1   a   inner   join   table1   b   on   a.xno=b.xno   )inner   join   table3   c   on   b.xx=c.xx)

在access中搜索多个表的时候,免不了要用到连接查询,其中包括左连接,内连接,右连接。现在就说明一下access在连接查询中的语法:
    多表查询
a.内连接
select g.sno,s.name,c.coursename from grades g JOIN students s ON g.sno=s.sno JOIN courses c ON    g.cno=c.cno
(注意可以引用别名)
b.外连接
b1.左连接
select courses.cno,max(coursename),count(sno) from courses LEFT JOIN grades ON courses.cno=grades.cno group by courses.cno
左连接特点:显示全部左边表中的所有项目,即使其中有些项中的数据未填写完全。

左外连接返回那些存在于左表而右表中却没有的行,再加上内连接的行。
b2.右连接
与左连接类似
b3.全连接
select sno,name,major from students FULL JOIN majors ON students.mno=majors.mno
两边表中的内容全部显示
c.自身连接
select c1.cno,c1.coursename,c1.pno,c2.coursename from courses c1,courses c2    where c1.pno=c2.cno
采用别名解决问题。
d.交*连接
select lastname+firstname from lastname CROSS JOIN firstanme
相当于做笛卡儿积

需要注意的是:access不支持三个表同时 连接 查询 比如下边的sql语句就存在语法错误:

   select * from table1 LEFT JOIN table2 ON table1.field1=table2.field2 LEFT JOIN table3 ON table1.field3=table3.field3

   如果想实现多个表之间的连接查询可以让两个作连接查询形成一个视图,然后使用视图和第三个表进行连接查询。

更改以后的sql语句:select * from (select * from table1 left join table2 on table1.field1=table2.field1)   as table1 left join table3 on table1.field1=table3.field1;

 

<think> 我们正在处理一个关于Access参数查询的问题。用户希望输入读者姓名后,查询结果能显示读者的多个信息(如姓名、编号等)。根据引用[3],我们有读者表(reader),其中包含dzzh(读者证号)、xm(姓名)等字段。 解决方案:创建一个参数查询,在条件中使用方括号提示输入读者姓名,并选择需要显示的多个字段。 步骤: 1. 打开查询设计视图,添加reader表。 2. 将需要显示的字段(如dzzh, xm, xb, sf, dhhm)拖到设计网格中。 3. 在xm字段的“条件”行中输入参数提示,例如:[请输入读者姓名:] 4. 运行查询,输入姓名,即可显示该读者的所有指定字段。 注意:如果存在同名读者,这样会返回所有同名的读者记录。如果需要精确查询,可以考虑使用读者证号(dzzh)作为参数,或者同使用姓名和证号。 示例SQL视图: ```sql SELECT dzzh, xm, xb, sf, dhhm FROM reader WHERE xm = [请输入读者姓名:]; ``` 如果希望实现模糊查询(部分匹配),可以使用LIKE运算符: ```sql SELECT dzzh, xm, xb, sf, dhhm FROM reader WHERE xm Like "*" & [请输入读者姓名:] & "*"; ``` 根据引用[3]中的数据库结构,我们还可以关联其他表(如借阅表borrow)获取更多信息。但当前需求是显示读者表的多列数据,所以以上操作即可满足。 高级技巧:如果希望根据窗体上的文本框输入来查询,则需要使用窗体,并在查询条件中引用窗体控件的值。但用户当前问题只要求参数查询,所以先提供参数查询的解决方案。 相关问题: 1. 如何避免同名读者导致的多个结果?(可建议同输入证号或使用其他唯一标识) 2. 如何将参数查询与窗体结合? 3. 如何实现输入一个参数同查询多个字段(如按姓名或证号查询)? 由于用户要求显示多个数据(多个字段),我们只需在查询中选择这些字段即可。 因此,回答如下: </think>### 参数查询显示读者多字段数据的解决方案 在Access中实现输入读者姓名后显示姓名、编号等多字段数据,可通过以下步骤操作: #### 核心操作步骤 1. **打开查询设计器** - 创建 → 查询设计 → 添加`reader`表[^3] 2. **设置显示字段** ```sql SELECT dzzh AS 读者证号, xm AS 姓名, xb AS 性别, sf AS 身份, dhhm AS 电话 FROM reader ``` 将所需字段拖到设计网格(证号、姓名、性别等) 3. **添加参数条件** - 在`xm`(姓名)字段的"条件"行输入: ```sql [请输入读者姓名:] ``` 4. **运行与测试** - 按F5运行 → 输入"李明" → 显示李明所有信息 - 结果包含读者证号、姓名、性别、身份、电话等字段 #### 高级优化方案 1. **模糊匹配同名读者** ```sql WHERE xm Like "*" & [输入姓名] & "*" ``` 输入"王" → 显示所有王姓读者[^1] 2. **关联借阅信息** ```sql SELECT reader.*, borrow.jyrq AS 借阅日期 FROM reader INNER JOIN borrow ON reader.dzzh = borrow.dzzh WHERE xm = [输入姓名] ``` 同显示借阅记录[^3] 3. **设置输出格式** ```sql FORMAT(dhhm, "000-0000-0000") AS 格式化电话 ``` 规范电话号码显示格式 4. **添加默认值** ```sql IIF(IsNull([输入姓名]), "所有读者", [输入姓名]) ``` 空参数显示全部读者 > **调试技巧**:右键查询 → SQL视图直接修改代码,使用`&`连接多条件[^4]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值