我想在我的语句中提取除了TOP 10 以外的所有记录,但是在我的子查询中使用ORDER BY“关键字ORDER附近的语法不正确”时,我一直遇到问题
@ID INT
as
SELECT ComVID, VID, MID, Ucomment, UdateAdded, MemberId, UserName, Avatar
FROM table.miComments JOIN table.mbrProfile2 ON MID = MemberId
WHERE VID = @ID EXCEPT (SELECT ComVID, VID, MID, Ucomment, UdateAdded, MemberId, UserName, Avatar FROM table.miComments JOIN table.mbrProfile2 ON MID = MemberId
WHERE VID = @ID ORDER BY UdateAdded DESC) 'ERROR: Incorrect Syntax near the keyword ORDER'
ORDER BY UdateAdded DESC
答案 0 :(得分:1)
你在谈论偏移。如果您有一个返回行1,2,3,4,5,6,7
的查询,并且想要跳过前三个(产生4,5,6,7
),则可以指定偏移量为3。
在MySQL中,您可以使用接受偏移参数的LIMIT子句。在PostgreSQL中,你需要OFFSET子句。 SQLServer(截至上次我被迫使用它时)不支持偏移量。
OFFSET表示在开始返回行之前跳过那么多行。 OFFSET 0与省略OFFSET子句相同。如果同时出现OFFSET和LIMIT,则在开始计算返回的LIMIT行之前会跳过OFFSET行。
SELECT * FROM tbl OFFSET 10
在MySQL中,如果没有为某些奇怪的原因指定限制,则无法指定偏移量:
要从特定偏移量检索所有行直到结果集的末尾,可以使用一些大数字作为第二个参数。此语句检索从第96行到最后一行的所有行:
SELECT * FROM tbl LIMIT 95,18446744073709551615;
答案 1 :(得分:1)
如果您使用的是MS SQL Server,则没有LIMIT或OFFSET等效项,因此您必须使用子查询来完成您想要的任务。
SELECT ComVID, VID, MID, Ucomment, UdateAdded, MemberId, UserName, Avatar
FROM table.miComments
JOIN table.mbrProfile2 ON MID = MemberId
WHERE VID = @ID AND ComVID NOT IN (
SELECT TOP 10 ComVID
FROM table.miComments
JOIN table.mbrProfile2 ON MID = MemberId
WHERE VID = @ID ORDER BY UdateAdded DESC)
ORDER BY UdateAdded DESC
以下StackOverflow链接中包含更多信息,这可能会有所帮助:
答案 2 :(得分:0)
此刻我无法重现您的确切SQL配置,但要回答"一般性问题":
示例:
SELECT
SUM(s.Records)
FROM
(
-- List of ALL records
SELECT
dbo.people.name,
dbo.people.address,
Count (*) as Records
FROM
dbo.people
WHERE
dbo.people.registration_date >= '01/01/2013'
AND
dbo.people.registration_date < '01/01/2014'
GROUP BY
dbo.people.name, dbo.people.address
-- Exclusion
EXCEPT
-- TOP 10 list
SELECT TOP 10
dbo.people.name,
dbo.people.address,
Count (*) as Records
FROM
dbo.people
WHERE
dbo.people.registration_date >= '01/01/2013'
AND
dbo.people.registration_date < '01/01/2014'
GROUP BY
dbo.people.name, dbo.people.address
ORDER BY
COUNT (*) DESC
) s
假设我们有一个人员数据库,他们的姓名+地址组合将它们限定为唯一记录(不是在关系级别,而是在业务需求级别)。
自SQL Server 2005以来, EXCEPT
已经可用。
答案 3 :(得分:0)
您可以将其用作简单查询:
with CTP as (select top 10 id_site from sites order by id_site DESC)
select * from sites
where id_site not in (select id_site from CTP)