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ディレクティブをサポートしていますが、他のシステムは や他の同様のディレクティブをサポートしている場合とサポートしていない場合がありTOPますFIRST

更新: さまざまな 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

これを使って:

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 に答える
1

多分

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