用于限制具有不同值的行数的SQL查询

时间:2011-02-02 17:58:54

标签: sql mysql database oracle pagination

SQL中是否有一种方法可以使用与以下内容等效的查询:

select * from table1, table2 where some_join_condition
and some_other_condition and count(distinct(table1.id)) < some_number;

我们说table1是员工表。然后,联接将导致有关单个员工的数据分布在多个行中。我想限制返回到某个数字的不同员工的数量。在这种情况下,行号或类似的条件是不够的。

那么获得与上述查询相同的输出效果的最佳方法是什么?

3 个答案:

答案 0 :(得分:1)

select *
from (select * from employee where rownum < some_number and some_id_filter), table2
where some_join_condition and some_other_condition;

答案 1 :(得分:1)

这适用于几乎所有的数据库

SELECT * 
FROM table1 t1
INNER JOIN  table2 t2
ON some_join_condition
   AND some_other_condition 
INNER JOIN ( 
    SELECT t1.id
    FROM table1 t1
    HAVING 
        count(t1.ID) > someNumber
    ) on t1.id = t1.id

有些DB有特殊的语法可以让它变得更加简单。

答案 2 :(得分:0)

我可能没有完全理解您要完成的任务,但是假设您正在尝试将每个员工减少到1行,但每个联接会导致每个员工多行并按员工姓名分组和其他字段仍然不够独特,无法将其划分为单行,然后您可以尝试使用排名和分区,然后为每个员工分区选择您喜欢的排名。

参见示例:http://msdn.microsoft.com/en-us/library/ms176102.aspx