从数据库
只选择一些行,我有以下查询:从数据库
string Query = String.Format("SELECT ArticleName FROM tblArticles WHERE UserID={0} ORDER BY PostDate DESC", UserID);
我想获得不超过3个的不同值ArticleName的“。
是否有可能这样做? (没有选择所有'ArticleName'只是其中3个?)
谢谢。
通常,您可以在查询的末尾使用LIMIT 3
实现这一
string Query = String.Format(
"SELECT ArticleName FROM tblArticleas WHERE UserID={0} ORDER BY PostDate DESC LIMIT 3",
UserID
);
或者用于Microsoft Access数据库显然你需要在开始使用TOP 3
代替,例如:
string Query = String.Format(
"SELECT TOP 3 ArticleName FROM tblArticleas WHERE UserID={0} ORDER BY PostDate DESC",
UserID
);
谢谢,但..我不工作... – 2013-04-25 10:15:55
@NaveTseva请参阅编辑 – Anentropic 2013-04-25 10:19:09
谢谢。现在它工作得很好! – 2013-04-25 10:22:54
你需要说你使用的是什么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;
}
也许
SELECT DISTINCT TOP 3 ArticleName, PostDate FROM tblArticleas WHERE UserID={0} ORDER BY PostDate DESC
由于DISTINCT和ORDER BY冲突,我得到了以下字符串不起作用的错误消息。 – 2013-04-25 10:15:35
对不起。将PostDate添加到您正在选择的列列表可修复冲突。这可以接受吗? – 2013-04-25 10:20:55
如果不是,一个快速的解决方法是在临时表中编写ArticleName,PostDate,然后从这个临时表中选择一列 – 2013-04-25 10:22:32
使用此:
string Query = String.Format("SELECT DISTINCT TOP 3 ArticleName FROM tblArticles WHERE UserID={0} ORDER BY PostDate DESC", UserID);
哪个数据库?还有数据库特定的解决方案。 – Kangkan 2013-04-25 10:09:47
我使用'Microsoft Access数据库(.mdb)' – 2013-04-25 10:11:19