2016-12-18 16 views
0

私が今持っているコードは次のとおりです。SQLiteCommandでサブクエリを使用する最善の方法は何ですか?

using (dbConnection) 
{ 
    if (dbConnection.State != System.Data.ConnectionState.Open) dbConnection.Open(); 

    SQLiteCommand command = new SQLiteCommand("SELECT * FROM BoardStates WHERE Move = @subquery", dbConnection); 
    SQLiteCommand cmd = new SQLiteCommand("SELECT MAX(Move) FROM BoardStates", dbConnection); 
    command.Parameters.AddWithValue("@subquery", cmd.ExecuteScalar().ToString()); 

    SQLiteDataReader reader = command.ExecuteReader(); 
    while (reader.Read()) 
    { 
     Console.WriteLine("Game: " + reader["Game"] + "\tMove: " + reader["Move"] + "\tState: " + reader["State"]); 
    } 
} 

私が作られて、最後の動きの行を返すようにしたいです。私は2つの別々のSQLiteCommandsを使用してこれを行います。これを最適化する方法、または1つのSQLiteCommandに組み合わせる方法はありますか?

答えて

0

documentationは言う:括弧で囲まれた

SELECT文がスカラー量として表示されることがあります。スカラ量として使用されるSELECTは、単一の列を持つ結果セットを返す必要があります。式の結果は、SELECTステートメントによって戻された最初の行の唯一の列の値です。

SELECT * 
FROM BoardStates 
WHERE Move = (SELECT MAX(Move) 
       FROM BoardStates); 

しかし、最大の値を持つ行を取得するには、単にソート使用することができます。

SELECT * 
FROM BoardStates 
ORDER BY Move DESC 
LIMIT 1; 
関連する問題