2

我有以下查询:

string Query = String.Format("SELECT ArticleName FROM tblArticles WHERE UserID={0} ORDER BY PostDate DESC", UserID);

我想为“ArticleName”获得不超过 3 个不同的值。
有可能这样做吗?(没有选择所有的 'ArticleName' 只是其中的 3 个?)

谢谢。

4

4 回答 4

3

您需要说明您使用的是什么 RDBMS。Mysql 和 sqlite 支持该LIMIT指令,而其他系统可能支持也可能不支持TOPFIRST或其他类似指令。

更新:看看不同的 RDBMS 引擎如何支持它。请参阅getLoadSomeRowsSql()infinispan 中的方法TableManipulation.java

在这里,如果链接停止工作:

 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;
 }
于 2013-04-25T10:04:19.493 回答
2

通常,您可以LIMIT 3在查询结束时使用来实现此目的

string Query = String.Format(
    "SELECT ArticleName FROM tblArticleas WHERE UserID={0} ORDER BY PostDate DESC LIMIT 3",
    UserID
);

或者对于 Microsoft Access DB,显然您需要TOP 3在开始时使用,例如:

string Query = String.Format(
    "SELECT TOP 3 ArticleName FROM tblArticleas WHERE UserID={0} ORDER BY PostDate DESC",
    UserID
);
于 2013-04-25T10:03:13.280 回答
1

也许

SELECT DISTINCT TOP 3 ArticleName, PostDate FROM tblArticleas WHERE UserID={0} ORDER BY PostDate DESC
于 2013-04-25T10:05:05.500 回答
1

用这个:

string Query = String.Format("SELECT DISTINCT TOP 3 ArticleName FROM tblArticles WHERE UserID={0} ORDER BY PostDate DESC", UserID);
于 2013-04-25T10:19:20.733 回答