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;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值