如何对使用INTERSECT的SQL查询结果按Q_submission_date排序?
解决方案
你原来的查询只从users表获取数据,而Q_submission_date属于Q表字段——结果集里根本没有这个字段,自然没法直接用它排序。要解决这个问题,必须先关联两张表,把需要排序的字段纳入结果集。
推荐写法:用INNER JOIN实现筛选+排序
这种写法逻辑清晰且性能更优,直接关联两张表并同时应用筛选条件:
SELECT u.*, q.Q_submission_date FROM `users` u INNER JOIN `Q` q ON u.user_id = q.Q_id WHERE u.user_level = 'N' AND q.Q_test = '-1' AND q.Q_dummy != '' ORDER BY q.Q_submission_date ASC; -- 替换为DESC可实现降序排序
保留IN子查询的替代写法
如果坚持要用IN的逻辑,也可以通过子查询提取Q表的必要字段后再关联:
SELECT u.*, q.Q_submission_date FROM `users` u JOIN ( SELECT Q_id, Q_submission_date FROM `Q` WHERE Q_test = '-1' AND Q_dummy != '' ) q ON u.user_id = q.Q_id WHERE u.user_level = 'N' ORDER BY q.Q_submission_date ASC;
为什么之前用AS操作失败?
AS只是给字段或表设置别名,但你根本没将Q表的Q_submission_date字段引入查询结果集——没有这个字段,再怎么设置别名也无法用它排序。核心是要先通过关联表把需要的字段拿到手,才能进行排序操作。
内容的提问来源于stack exchange,提问作者2WFR
相关产品推荐
相关产品推荐

