求3个怪异的SQL
----------------------问题1----------------------------
有两个表 Info 和 Msg
Info
-------
ID Name
1 张三
2 李四
3 王麻子
Msg
-------
UserID Text
1 文字内容
2 我顶你个肺
1 你太有才了
3 遭了
2 男女关系
要完成的目标是用户给出Info表中Name,比如“李四”,然后取得“李四”的ID,再到Msg表中统计UsrID为李四ID的记录的数目,如果小于10就取出李是的ID
现在是用两次查询完成的
SELECT ID FROM Info WHERE Name=“李四”
SELECT UserID FROM Msg WHERE (SELECT COUNT(*) FROM Msg WHERE UserID=李四ID) <10
我想请问能不能在一句SQL中完成这些操作,Access的IF()函数有用吗?
如果不能在一句里完成,请告诉我最简单的语句,谢谢
------------------问题2-----------------------------------
有表Info
Info
---------
ID Point
1 1000
2 2000
3 1500
4 8000
Point是用户的点数,用户可以把自己的点数转给别人,比如用户A要转500点给用户B,现在是用两次查询完成的
UPDATE Info SET Point=Point-500 WHERE ID=A
UPDATE Info SET Point=Point+500 WHERE ID=B
我想请问能不能在一句SQL中完成这些操作?如果不能在一句里完成,请告诉我最简单的语句,谢谢
------------------问题3-----------------------------------
有表Info 和 Exam
Info
---------
ID Point
1 1000
2 2000
3 1500
4 8000
Exam
---------
Text
我QQ你个XX
停车场
玉米面
用户要取出Exam中的一条记录,前提是要扣掉自己的500点数,如果点数不够500就离开,现在是这样做的
SELECT Point FROM Info WHERE ID=用户ID
if gRs( "Point ")> 500 then
UPDATE Info SET Point=Point-500 WHERE ID=用户ID
SELECT Text FROM Text WHERE ID=文章ID
end if
我想请问能不能在一句SQL中完成这些操作?用户Point不够500就返回空,如果够500就扣除500然后返回ID=文章ID的文章内容,如果不能在一句里完成,请告诉我最简单的语句,谢谢
在线等,谢谢大家
------解决方案--------------------不复杂:
select UserID,count(*) as gs from msg group by UserID having count(*) <10
将COUNT(*)<10的记录选择出来,按USERID分组
select * from Info a inner join (
select UserID,count(*) as gs from msg group by UserID having count(*) <10) b
on a.ID=b.UserID where a.Name= '李四 '
用INFO表与上述结果连接,条件是a.ID=b.UserID ,并且Name= '李四 '
比起T-SQL,jet sql应该更简单。