Mysql 基于内部查询返回计数的有效联合方法?

Mysql 基于内部查询返回计数的有效联合方法?,mysql,sql,union,Mysql,Sql,Union,我本来打算问另一个问题,但在搞乱了SQLFiddle之后,我能够解决我的问题(但无法证明效率) 目的是从有限的集合中询问用户“不好”的问题,一旦这些问题都解决了,就从从未尝试过的问题库中询问 有没有一种更有效的方法可以通过基于内部查询行数的动态限制来组织这种情况,或者我应该在每个子查询中使用一个限制,以避免消耗不必要的资源 注意:最终外部查询请求的行数永远不会超过30行 感谢@Squirrel为我展示了SQL FIDLE。如果您希望从第一个子查询开始填写所有内容,然后从第二个子查询开始填写其余

我本来打算问另一个问题,但在搞乱了SQLFiddle之后,我能够解决我的问题(但无法证明效率)

目的是从有限的集合中询问用户“不好”的问题,一旦这些问题都解决了,就从从未尝试过的问题库中询问

有没有一种更有效的方法可以通过基于内部查询行数的动态限制来组织这种情况,或者我应该在每个子查询中使用一个限制,以避免消耗不必要的资源

注意:最终外部查询请求的行数永远不会超过30行


感谢@Squirrel为我展示了SQL FIDLE。

如果您希望从第一个子查询开始填写所有内容,然后从第二个子查询开始填写其余内容,请对结果集进行排序并对结果进行限制:

SELECT problem_id, name
FROM ((SELECT problem_id, name, 'bad' as which
       FROM (SELECT r.problem_id, p.name, sum(r.value) as knowledge
             FROM responses r JOIN
                  problem p
                  ON p.id = r.problem_id
             GROUP BY r.problem_id
            ) 
       WHERE knowledge = 0
      ) union all
      (SELECT id, name, 'new'
       FROM problem p
       WHERE p.id NOT IN (SELECT problem_id FROM responses)
       GROUP BY p.id
      )
     ) as final
ORDER BY which
LIMIT 30;

谢谢@Gordon!这是一个非常有见地的问题!要获取最新/最佳/任意30:(选择…按…限制订购30)联合[所有](选择…按…限制订购30)按。。。限制30