我有以下查询:
string Query = String.Format("SELECT ArticleName FROM tblArticles WHERE UserID={0} ORDER BY PostDate DESC", UserID);
我想为“ArticleName”获取不超过 3 个不同的值。
有可能这样做吗? (不选择所有“ArticleName”,只选择其中的 3 个?)
谢谢。
最佳答案
您需要说明您使用的是什么 RDBMS。 Mysql 和 sqlite 支持 LIMIT
指令,而其他系统可能支持也可能不支持 TOP
、FIRST
或其他类似指令。
更新:看看不同的 RDBMS 引擎如何支持它。请参阅 infinispan 的 TableManipulation.java
中的 getLoadSomeRowsSql()
方法.
这是万一链接失效了:
switch (getDatabaseType()) {
case ORACLE:
loadSomeRowsSql = String.format("SELECT %s, %s FROM (SELECT %s, %s FROM %s) WHERE ROWNUM <= ?", dataColumnName, idColumnName, dataColumnName, idColumnName, getTableName());
break;
case DB2:
case DB2_390:
case DERBY:
loadSomeRowsSql = String.format("SELECT %s, %s FROM %s FETCH FIRST ? ROWS ONLY", dataColumnName, idColumnName, getTableName());
break;
case INFORMIX:
case INTERBASE:
case FIREBIRD:
loadSomeRowsSql = String.format("SELECT FIRST ? %s, %s FROM %s", dataColumnName, idColumnName, getTableName());
break;
case SQL_SERVER:
loadSomeRowsSql = String.format("SELECT TOP (?) %s, %s FROM %s", dataColumnName, idColumnName, getTableName());
break;
case ACCESS:
case HSQL:
case SYBASE:
loadSomeRowsSql = String.format("SELECT TOP ? %s, %s FROM %s", dataColumnName, idColumnName, getTableName());
break;
default:
// the MySQL-style LIMIT clause (works for PostgreSQL too)
loadSomeRowsSql = String.format("SELECT %s, %s FROM %s LIMIT ?", dataColumnName, idColumnName, getTableName());
break;
}
关于database - 只从数据库中选择一些行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16211817/