我用Access有多个Inner Join时报错,应该怎么写呢?我的SQL语句为
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#'
在sqlserver运行时没有问题的
Access有多个Inner Join时,要用括号括起来,你的SQL语句应该改为
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 3个表是肯定没问题的,出错的原因是执行顺序!需要加()来确定执行顺序!
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;