多表一起查询时的排序问题,sql高手请入

Y-atcg 2012-04-25 08:53:48


//User_Value,User_Nums,User_DateTime 这3个表的 UserID 与 User_Name.UserID 同步
//

//查询虚拟逻辑条件为: 是否可以发布信息 = 'true' AND 用户金钱 >= 1
string SQL_查找符合条件的数据 = @"
SELECT User_Name.UserID
FROM

(((User_Name
LEFT JOIN User_Value ON User_Value.UserID = User_Name.UserID)
LEFT JOIN User_Nums ON User_Nums.UserID = User_Name.UserID)
LEFT JOIN User_DateTime ON User_DateTime.UserID = User_Name.UserID)

WHERE (User_Value.TypeID = 7 AND User_Value.Value = 'true')
AND (User_Nums.TypeID = 3 AND User_Nums.Nums >= 0)


GROUP BY User_Name.UserID
";

//查询上述结果并且按照虚拟逻辑排序条件: ORDER BY 注册时间 DESC
string SQL_查找符合条件的数据_并排序 = @"

SELECT User_DateTime.UserID FROM
(
SELECT User_Name.UserID AS 符合条件的用户ID
FROM

(((User_Name
LEFT JOIN User_Value ON User_Value.UserID = User_Name.UserID)
LEFT JOIN User_Nums ON User_Nums.UserID = User_Name.UserID)
LEFT JOIN User_DateTime ON User_DateTime.UserID = User_Name.UserID)

WHERE (User_Value.TypeID = 7 AND User_Value.Value = 'true')
AND (User_Nums.TypeID = 3 AND User_Nums.Nums >= 0)

GROUP BY User_Name.UserID
)
,User_DateTime
WHERE User_DateTime.UserID = 符合条件的用户ID
AND User_DateTime.TypeID = 8
ORDER BY User_DateTime.DateTime DESC

";

//主要想实现根据(User_Value,User_Nums,User_DateTime).TypeID = 某ID 的行 (User_Value|User_Nums|User_DateTime).(Value|Nums|DateTime) = 'XXX' 进行查询
//并且根据(User_Value,User_Nums,User_DateTime).TypeID = 某ID 的行 (User_Value|User_Nums|User_DateTime).(Value|Nums|DateTime) = 'XXX' 进行排序
//User_Name 的数据并不一定具有所有的(User_Value,User_Nums,User_DateTime)的值,就是并不对应

//上述语句已经可以实现根据某些字段进行排序的逻辑,但是效率奇差,10万行数据(User_Value,User_Nums,User_DateTime),至少要运行10秒以上
//本屌丝做了一些小测试,猜测主要是因为数据的行数过多(User_Value,User_Nums,User_DateTime),在 LEFT JOIN 后判断每行的数据 (User_Value.TypeID = 7 AND User_Value.Value = 'true') 以及 (User_Nums.TypeID = 3 AND User_Nums.Nums >= 0) 比较浪费时间
//并且 GROUP BY User_Name.UserID 这个分组也挺耗时
//本屌SQL语句纯属小白级别,有情各位大神帮忙修改一下SQL语句
//ACCESS数据库.........
...全文
142 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Y-atcg 2012-04-27
  • 打赏
  • 举报
回复
自己搞定了.........

采用多层嵌套的SELECT,然后把底层的值传递到最上层,进行排序..

散粉
ACMAIN_CHM 2012-04-26
  • 打赏
  • 举报
回复

建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html

1. 你的 create table xxx .. 语句
2. 你的 insert into xxx ... 语句
3. 结果是什么样,(并给以简单的算法描述)
4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)

这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。

wwwwb 2012-04-26
  • 打赏
  • 举报
回复
什么问题
贴数据及要求结果贴出来看看

7,713

社区成员

发帖
与我相关
我的任务
社区描述
Microsoft Office Access是由微软发布的关系数据库管理系统。它结合了 MicrosoftJet Database Engine 和 图形用户界面两项特点。
社区管理员
  • Access
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧