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)
多表查询
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;