次のクエリがあります。
string Query = String.Format("SELECT ArticleName FROM tblArticles WHERE UserID={0} ORDER BY PostDate DESC", UserID);
「ArticleName」の異なる値を 3 つ以上取得したくありません。
それは可能ですか?(すべての 'ArticleName' を 3 つだけ選択せずに?)
ありがとう。
次のクエリがあります。
string Query = String.Format("SELECT ArticleName FROM tblArticles WHERE UserID={0} ORDER BY PostDate DESC", UserID);
「ArticleName」の異なる値を 3 つ以上取得したくありません。
それは可能ですか?(すべての 'ArticleName' を 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;
}
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
);
これを使って:
string Query = String.Format("SELECT DISTINCT TOP 3 ArticleName FROM tblArticles WHERE UserID={0} ORDER BY PostDate DESC", UserID);
多分
SELECT DISTINCT TOP 3 ArticleName, PostDate FROM tblArticleas WHERE UserID={0} ORDER BY PostDate DESC