再次求解数据库的sql语句问题,这是两张表的关联问题,有点小难度的...
发布网友
发布时间:2024-01-21 13:15
我来回答
共5个回答
热心网友
时间:2024-10-26 18:49
select
s.sDNum,
isnull(sum(d.stuNum),0)stds, --计算每个宿的入住生数
s.spuwei - isnull(sum(d.stuNum),0) freeNum --余床位
from sushe s
left join student d on s.sLNum=d.stuDNum --联表条件:宿舍号
group by s.sDNum,s.spuwei --分类字段,spuwei放在这里是为了做减法时要用到。
---------------------
你的空铺铺位的分配,是从1-4顺序发放,还是可以让学生自行挑选?
如果你要统计具体到某个铺位,而又不想在数据库生成铺位表,那就需要在学生分配表里加一个字段[铺位].
你在查询的时候,就需要临时的生成一张表,实际是一个1-4的序列,让它与宿舍表先联接,这样你的查询主表就变成宿舍_铺位表(或以考虑用视图),然后与学生分配表关联时on的条件加上铺位=铺位,最后如果是统计,与上面的代码逻辑一致,如果是要查铺位情况,同样联表查询就行了,只是少了分类汇总,改为在查询中添加相应的条件.
热心网友
时间:2024-10-26 18:45
空寝室
select slnum,sdnum
from sushe
where not exists (select * from student where stulnum = shushe.slnum and studnum = sushe.sdnum)
空铺
select sushe.sdnum
from sushe,student
where sushe.slnum = student.stulnum and sushe.sdnum = student.studnum and count(sushe.sdnum) < 4
group by sushe.sdnum
注:你的sushe表是一对多的关系,怎么让他动态变呢?
宿舍楼栋号 学生寝室号 铺位
1 101 1
1 101 2
1 101 3
1 101 4
1 102 1
……………………………………
热心网友
时间:2024-10-26 18:48
让sushe表中的spuwei动态的变为一个?
这个最好的办法是建立一个View,每次去看这个view就行了,原来的两个表不动。
如果一定要update表sushe的话,就是:
update sushe ss
set ss.spuwei = 4 - (select count(st.stunum) from student st left join sushe ss on
(st.stuLNum=ss.sLNum and st.stuDNum=ss.sDNum) where st.stuLNum=ss.sLNum and st.stuDNum=ss.sDNum group by st.stulnum st.studnum)
热心网友
时间:2024-10-26 18:46
string sql="select sushe.sDNum , count( stuNum) from student,sushe where student.sDNum=sushe.sDNum";
DataTable dd = Sqlite.link.gettable(sql);
if (dd != null&&dd.Rows.Count>0)
{
int count=4-convert.toint32(dd[1]);//count为该宿舍空余床铺
string sql1="update sushe set spuwei = "+count+" where sDNum='"+dd[0].tostring()+"'";
Sqlite.link.ExecSql(sql)1;
}
热心网友
时间:2024-10-26 18:41
如果只把2张表关联起来,先找到2个表里内容相同的字段。再用连接语句:
select 字段1 ,字段2,字段3 from tab1 t1 join tab2 t2 where t1.学生号=t2.学生学号