扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
这个需要查看下你的表是怎么设计的
创新互联专注于滨州网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供滨州营销型网站建设,滨州网站制作、滨州网页设计、滨州网站官网定制、微信小程序开发服务,打造滨州网络公司原创品牌,更为您提供滨州网站排名全网营销落地服务。
在我的想法中,至少这张表中要有一个字段,就是parent_id
你可以规定当parent_id 为0时为一级目录,所以你可以根据parent_id=0来确定是一级目录
子级就要看你是否是需要子级下面的子级 还是只是需要子级
如果是第二种就简单了,根据parent_id = id可以查出下面的子级
如果是第一种,在mysql里面就需要写函数或存储过程了 一级级往下走 直到子级为空
Oracle就方便些,他提供了一个函数可以直接调用就行
start with…connect by prior
可以参考:网页链接
java版的实际例子。类同你说的情况
private void findChildList(AssetType parent,ListAssetType list){
String hql = "from AssetType a where a.parentAssetType.assetTypeId=? ORDER BY a.sort,a.assetTypeName asc";
ListAssetType childList = this.assetTypeDao
.getEntityManager()
.createQuery(hql)
.setParameter(1, parent.getAssetTypeId())
.getResultList();
int size = childList.size();
if(size0){
for (int i = 0; i size; i++) {
AssetType assetType = childList.get(i);
ListAssetType childs = assetType.getChildAssetType();
if(childs.size()0){
list.addAll(childs);
this.findChildList(assetType, list);//递归查询节点的子节点
}
}
}
}
1、where型子查询
(把内层查询结果当作外层查询的比较条件)
#不用order by 来查询最新的商品
select goods_id,goods_name from goods where goods_id = (select max(goods_id) from goods);
#取出每个栏目下最新的产品(goods_id唯一)
select cat_id,goods_id,goods_name from goods where goods_id in(select max(goods_id) from goods group by cat_id);
2、from型子查询
(把内层的查询结果供外层再次查询)
#用子查询查出挂科两门及以上的同学的平均成绩
思路:
#先查出哪些同学挂科两门以上
select name,count(*) as gk from stu where score 60 having gk =2;
#以上查询结果,我们只要名字就可以了,所以再取一次名字
select name from (select name,count(*) as gk from stu having gk =2) as t;
#找出这些同学了,那么再计算他们的平均分
select name,avg(score) from stu where name in (select name from (select name,count(*) as gk from stu having gk =2) as t) group by name;
3、exists型子查询
(把外层查询结果拿到内层,看内层的查询是否成立)
#查询哪些栏目下有商品,栏目表category,商品表goods
select cat_id,cat_name from category where exists(select * from goods where goods.cat_id = category.cat_id);
下面只定义了基本结构,其他的如索引,字符集等要酌情加上。
create table departments (
id int primary key,
name varchar(50) not null,
parent_id int
)
create table employee (
id int primary key,
department_id int not null,
name varchar(50) not null,
)
下面是一些伪代码
department = select * from departments where name = [department_name]
departments = select * from departments where parent_id = department.id
select * from employee where department_id in [departments.id + department.id]
子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从 MySQL 4.1 开始引入,在 SELECT 子句中先计算子查询,子查询结果作为外层另一个查询的过滤条件,查询可以基于一个表或者多个表。
子查询中常用的操作符有 ANY(SOME)、ALL、IN 和 EXISTS。
子查询可以添加到 SELECT、UPDATE 和 DELETE 语句中,而且可以进行多层嵌套。子查询也可以使用比较运算符,如“”、“=”、“”、“=”、“!=”等。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流