sql语句求助
表A 字段:x1,x2,x3
表B:字段:y1,y2,y3
B.y1和A.x1是一对多关系
select top 2 A.*,b.y3 from A,B where B.y1=A.x1 order by A.x1 asc 可以取出前2个记录
取21-40 sql 怎么写?
我自己写的取出来的东西总是不对.麻烦高手帮忙写一个.谢谢了!
[解决办法]
这个得加ID字段
或者最简单的办法
top 40
然后移到21
[解决办法]
select 表a.*,表b.* from 表a inner join 表b on 表a.x1=表b.y1 where XXXID between 21 and 40
注意,XXXID 是能定位21到40的字段,如果该字段名称在两个表中都有,那么则需要加入表名限定
如果LZ希望是表中记录顺序的21到40那么,是无法达到效果的,因为数据库并不能保证数据的顺序和物理存储顺序对应,一个相同的记录在不能的时候,其保存是不一定是一样的,要确保取得的数据的顺序,一般,需要加入一个顺序字段比如 xxxid
top只能取得前的若干个记录
[解决办法]
可以用嵌套的方式,将排序反转,就又可以用 TOP 了。
如果关心返回结果的次序,再嵌套一层。
select top 20 * from (select top 40 A.*,b.y3 from A,B where B.y1=A.x1 order by A.x1 asc ) t order by x1 desc
[解决办法]
not exists
好像不能用于整个记录比较吧?我记得只能使用单个字段
字段名 not exists(select aField From aTable)
子查询返回一个字段
[解决办法]
首先,要搞清楚两个表之间的对应关系。谁是1,谁是n。
其次,两个表进行联合查询时,要有唯一的主键,否则取出的内容可能会前后顺序不同,因为下面的操作涉及到取出的顺序,所以这个很关键。
再次,从这个联合查询结果中,再取出第21~40条结果即可。
为了检查起来方便,最好不要使用单一的SQL语句完成过于复杂的操作,除非查询量大,操作频繁,否则使用多条SQL语句完成操作,可以方便调试和维护。