一个循环查询数据库的问题

来源:百度知道 编辑:UC知道 时间:2024/05/08 05:35:15
现有一张表A(部门表),一张表B(员工表),我要查询将所有员工分类排列,现实用方法如下:

SELECT * FROM A 取出所有部门中的记录,然后通过每一条部门记录中的id去查询员工表中所属部门的id
然后:
SELECT * FROM B WHERE class = xxx ;意思是如果有1000个部门,就需要执行1000次查询,数据库负荷很大
因为部门信息也需要显示,所有不能简简单单对员工表B进行GROUP BY .

请问有什么解决办法没?
如果按照下面这个方法,我无法得到A表中的东西啊,因为A表中不仅仅只有一个A.部门名称,还有其他信息,我需要A表与B表中的全部信息。可以用一个查询实现吗?或者最好的方法是什么?

select B.*,A.部门名称 from A,B where A.部门ID = B.class group B.xx

提高悬赏!!!

我猜,您是把分类和排序搞混了。

分类是将某一组记录合并成一条记录。使用GROUP BY子句。

排序(也可叫分类排序)是将记录某些字段的顺序排列,是换某些相同类别、特征的记录排列到一起。

如果您是要排序,所以这样就可以显示全部字段:

select * from A,B where A.部门ID = B.class order by B.xx

或者,您的确是要对B表某种分类汇总后再与A表连接,显示其部门。那么分类后,A表一般就不会显示所有字段了,换句话说,分类后所显示的字段,必须是以下两者之一:
1、分类字段。
2、进行聚合运算的字段,如求和,计数,求平均等。

B表分类后再与部门表连接这样作:

SELECT * FROM
(select 部门ID,XM,FIELDX,FIELDY=MAX(FIELDY),FIELDE=SUM(FIELDE) from A GROUP BY XM,CLASS,FIELDX) AS TMP,B WHERE B.CLASS=TMP.部门ID

select B.*,A.部门名称 from A,B where A.部门ID = B.class group B.xx

试一下这一条,有问题再问

select a.*,b.* from A(部门表 a,B(员工表)b where b.class=a.id group by b.class

要的解决问题的方法,而不是答案。
你先找出两个表的关联所在。找到关联就容易多了。
另外,一个查询结果可以当成一个“表”来看待。