日期:2014-05-19  浏览次数:20496 次

sql 语句求解,表循环的问题
二个表     cat   class
表结构及数据
cat   表
cat_id           cat_name     cat_prd_id
1                     cat_1           cat_prd_1
2                     cat_2           cat_prd_2

class   表
class_id       class_name     class_prd_id                 cat_prd_id
1                     class_1           class_prd_1                   cat_prd_1
2                     class_2           class_prd_2                   cat_prd_1
3                     class_3           class_prd_3                   cat_prd_1
4                     class_4           class_prd_4                   cat_prd_2
5                     class_5           class_prd_5                   cat_prd_2

表结构说明
可以看做一个大类表,一个分类表。大类和分类表通过cat_prd_id关联。
大类的记录唯一,属于该大类的分类可能有N个

希望得到的结果
在大类(CAT)表循环的过程中,如果检测到分类(class)表中有属于该大类的记录则显示出来,在asp   中可以很好的用循环做出来,但现在因为这2个表的数据量非常大,如果用asp的do   while   not   循环来做的话太耗资源,看能否通过一条select语句完成。
结果类似如下
1                     cat_1           cat_prd_1
1                     class_1           class_prd_1                   cat_prd_1
2                     class_2           class_prd_2                   cat_prd_1
3                     class_3           class_prd_3                   cat_prd_1
2                     cat_2           cat_prd_2
4                     class_4           class_prd_4                   cat_prd_2
5                     class_5           class_prd_5                   cat_prd_2


------解决方案--------------------
select class_id , class_name, class_prd_id , cat_prd_id from class
where exists(select 1 from cat where cat_prd_id=class.cat_prd_id)
union all
select cat_id , cat_name , cat_prd_id, ' ' from cat

order by case when cat_prd_id= ' ' then 1 else 2 end, class_id
------解决方案--------------------
簡化下,可以這麼寫