如何优化这段查询代码
winform程序
有三张表,简单说明如下(Access数据库)
表A(机器)
字段: id 区域
表B(区域)
字段:id 性质
表C(负责人)
字段:id 名称
实际上的情况要比这个复杂一点,为了说明问题我简化了一下
每个表的id字段都是各自的主键,我需要做的是在datagridview中将机器id,所属区域,所属区域的负责人显示出来,如果仅仅是这样就好办了,比较麻烦的是表A中的机器可能不属于任何区域(此时区域字段用0填充),也可能属于好几个区域(用,隔开区域id,比如1,2,3),而表B中区域字段可能是空的或者是表c中id字段中的一个值(只有一个)
表A
id 区域
1 0
2 1,2
3 3
4 1,3
表B
id 性质
1 1
2 2
3
表C
id 负责人
1 张三
2 李四
显示如下
id 所属区域 负责人
1 0 无
2 1,2 张三,李四
3 3 该区域未指定负责人
4 1,3 张三,该区域未指定负责人
我原来的查询方式是遍历表A,如果其所属区域为0则设置变量值为“无”,否则用变量记录所属区域的值,然后用split分开,分别查询该区域id在表b中对应的性质,如果性质为空则设置变量为“该区域未指定负责人”,将所属的每个区域的负责人名称组合到变量中
sql语句如下(程序中字段名为英文,此处为了说明方便写成中文)
sqlQuery = "select id ,区域 from 表A ";
ds = DataAccess.GetDataSet(sqlQuery, "表A ");
for (int dscount = 0; dscount < ds.Tables[0].Rows.Count; dscount++)
{
str = " ";
if (ds.Tables[0].Rows[dscount][1].ToString() != "0 ")//该机器有所属区域
{
idarea = ds.Tables[0].Rows[dscount][1].ToString().Split( ', ');
for (int i = 0; i < idarea .Length; i++)
{
sql = "select id from 表B where id= " + idarea [i] + " ";
if (DataAccess.QueryData(sql) != " ")//该区域有负责人
{
sql = "select 负责人 from 表C where id =(select 性质 from 表B where id= " + idarea [i] + ") ";
ds2 = DataAccess.GetDataSet(sql, "表B ", "表C ");