2013-04-25 60 views
2

只選擇一些行,我有以下查詢:從數據庫

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

我想獲得不超過3個的不同值ArticleName的「。
是否有可能這樣做? (沒有選擇所有'ArticleName'只是其中3個?)

謝謝。

+0

哪個數據庫?還有數據庫特定的解決方案。 – Kangkan 2013-04-25 10:09:47

+0

我使用'Microsoft Access數據庫(.mdb)' – 2013-04-25 10:11:19

回答

2

通常,您可以在查詢的末尾使用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 
); 
+0

謝謝,但..我不工作... – 2013-04-25 10:15:55

+0

@NaveTseva請參閱編輯 – Anentropic 2013-04-25 10:19:09

+0

謝謝。現在它工作得很好! – 2013-04-25 10:22:54

2

你需要說你使用的是什麼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; 
} 
1

也許

SELECT DISTINCT TOP 3 ArticleName, PostDate FROM tblArticleas WHERE UserID={0} ORDER BY PostDate DESC 
+0

由於DISTINCT和ORDER BY衝突,我得到了以下字符串不起作用的錯誤消息。 – 2013-04-25 10:15:35

+0

對不起。將PostDate添加到您正在選擇的列列表可修復衝突。這可以接受嗎? – 2013-04-25 10:20:55

+0

如果不是,一個快速的解決方法是在臨時表中編寫ArticleName,PostDate,然後從這個臨時表中選擇一列 – 2013-04-25 10:22:32

1

使用此:

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