【问题标题】:What is the best way to use subqueries with SQLiteCommand?使用 SQLiteCommand 使用子查询的最佳方式是什么?
【发布时间】:2016-12-18 16:30:19
【问题描述】:

我现在的代码如下:

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 中?

【问题讨论】:

    标签: c# sql sqlite database-connection


    【解决方案1】:

    documentation 说:

    括号中的 SELECT 语句可能显示为标量。用作标量的 SELECT 必须返回具有单列的结果集。表达式的结果是 SELECT 语句返回的第一行中唯一列的值。

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

    但是要得到最大的行,你可以简单地使用排序:

    SELECT *
    FROM BoardStates
    ORDER BY Move DESC
    LIMIT 1;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-04
      • 2012-07-14
      • 2011-05-26
      相关资源
      最近更新 更多