2016-11-14 123 views
0

我是新来查询mysql中的表,也使用存储过程。我在下面有这个查询,我想查询所有数据是>5。有没有像这样的查询select * from table Except top 5所以它会从数据开始#6我搜索了一些代码,但我只找到一个没有条件的直接查询。如何从表中选择除前5条记录以外的所有记录?

SELECT * 
    FROM dbo.PersonSkill INNER JOIN 
    dbo.SpecialSkill ON dbo.PersonSkill.SpecialSkillsId = dbo.SpecialSkill.SpecialSkillsId 
WHERE dbo.PersonSkill.PersonId = @PersonId   
+0

这是关于MySQL? – Strawberry

回答

2

SQL服务器可是没有LIMIT或OFFSET功能,但您可以模拟此行为,如this,结果如下所示:

;WITH Results_CTE AS 
(
    SELECT 
     dbo.PersonSkill.*, dbo.SpecialSkill.SpecialSkillsId, dbo.SpecialSkill.OtherCol 
     ROW_NUMBER() OVER (ORDER BY @PersonId) AS 'RowNum' 
    FROM dbo.PersonSkill 
    INNER JOIN dbo.SpecialSkill 
    ON dbo.PersonSkill.SpecialSkillsId = dbo.SpecialSkill.SpecialSkillsId 
    WHERE dbo.PersonSkill.PersonId = @PersonId 
) 
SELECT * 
FROM Results_CTE 
WHERE RowNum >5 
+0

Results_CTE的含义是什么? –

+0

临时表的别名 – Aroniaina

+0

我得到了这个错误''SpecialSkillsId'列'多次指定'Results_CTE'。 ' –

1

您可以简单地使用LIMIT参数。

LIMIT 5, 10 

第一个参数(5) - 开始从

第二个参数(10) - 多少行选择

+0

我如何在我的查询中使用它?对不起,新的在这我想选择所有其余的数据。 –

+0

阅读此文档:http://dev.mysql.com/doc/refman/5.7/en/select.html此网站不是“我将免费编写您的代码”了解它是如何工作的。这只是如何制作和学习的一种方式。 – 3y3skill3r

+0

'LIMIT'与'ORDER BY'一起使用时才有意义。所以你应该为查询添加一个排序。 –

2

试试这个

SELECT  * 
    FROM   dbo.PersonSkill INNER JOIN 
          dbo.SpecialSkill ON dbo.PersonSkill.SpecialSkillsId = dbo.SpecialSkill.SpecialSkillsId 
    WHERE  dbo.PersonSkill.PersonId = @PersonId and unique_id not in (SELECT top 5 unique_id 
    FROM   dbo.PersonSkill INNER JOIN 
          dbo.SpecialSkill ON dbo.PersonSkill.SpecialSkillsId = dbo.SpecialSkill.SpecialSkillsId 
    WHERE  dbo.PersonSkill.PersonId = @PersonId) 
+0

关键字LIMIT的语法不正确。我正在使用sql server 2008 r2 –

+0

真的,那么你应该修改你的标签草莓建议。 –

1

试试这个

SELECT * FROM (SELECT *,ROW_NUMBER() OVER (ORDER BY @PersonId) as rn 
FROM dbo.PersonSkill INNER JOIN 
dbo.SpecialSkill ON dbo.PersonSkill.SpecialSkillsId = dbo.SpecialSkill.SpecialSkillsId 
WHERE dbo.PersonSkill.PersonId = @PersonId)A where A.rn>5