我试图用这个查询得到我的表的最后和下一行:SQL语句返回错误的值(TOP N ... ORDER BY)
SELECT TOP 1 Nummer FROM Empfänger WHERE Nummer < 4748 ORDER BY Nummer DESC
UNION
SELECT TOP 2 Nummer FROM Empfänger WHERE Nummer >= 4748 ORDER BY Nummer ASC;
主键“Nummer”是独一无二的和自增,所以
4747, 4748, 4749
应该恕我直言,返回上述的数字,而是返回:
4747, 4798, 4799
当我使用Access打开数据库并将筛选器设置为“之间”时,值显示正确。
我改变了语句:
SELECT DISTINCT TOP 1 Nummer FROM Empfänger WHERE Nummer < 4748 ORDER BY Nummer DESC
UNION
SELECT DISTINCT Nummer FROM Empfänger WHERE Nummer = 4748
UNION
SELECT DISTINCT TOP 1 Nummer FROM Empfänger WHERE Nummer > 4748 ORDER BY Nummer ASC;
这工作近乎完美。
4747, 4748, 4750
当我写每一个语句返回正确的价值观单个查询...
SELECT DISTINCT TOP 1 Nummer FROM Empfänger WHERE Nummer < 4748 ORDER BY Nummer DESC
= 4747
SELECT DISTINCT Nummer FROM Empfänger WHERE Nummer = 4748
= 4748
SELECT DISTINCT TOP 1 Nummer FROM Empfänger WHERE Nummer > 4748 ORDER BY Nummer ASC;
= 4749
\
我检查一遍,突然上面所示的查询工作。 谢谢你的帮助。
您正在使用哪些DBMS?在您的数据库管理系统中'order by'之前是否应用了'TOP n'子句?检查文档! –
我使用Access 2007,但数据库最初是在Access 1997中编写的。 Order by子句应用于TOP子句之后,我相信。 – jAC