只選擇一些行,我有以下查詢:從數據庫
string Query = String.Format("SELECT ArticleName FROM tblArticles WHERE UserID={0} ORDER BY PostDate DESC", UserID);
我想獲得不超過3個的不同值ArticleName的「。
是否有可能這樣做? (沒有選擇所有'ArticleName'只是其中3個?)
謝謝。
只選擇一些行,我有以下查詢:從數據庫
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