mysql - 如何在一次查询或往返中对同一个表进行两次选择?

标签 mysql c#-4.0

好的,这是我尝试过的代码片段:

    private static void CheckForChanges(MySqlConnection connection)
    {
        DateTime hair = DateTime.Parse(SmartStyleDataset.Tables["Hair"].Compute("MAX(lastUpdated)", null).ToString());
        DateTime cloths = DateTime.Parse(SmartStyleDataset.Tables["Cloths"].Compute("MAX(lastUpdated)", null).ToString());
        DateTime accessories = DateTime.Parse(SmartStyleDataset.Tables["Accessories"].Compute("MAX(lastUpdated)", null).ToString());
        DateTime cosmetics = DateTime.Parse(SmartStyleDataset.Tables["Cosmetics"].Compute("MAX(lastUpdated)", null).ToString());

        List<String>[] NewRows = { new List<String>(), new List<String>(), new List<String>(), new List<String>() };   

        using (var command = connection.CreateCommand())
        {
            connection.Open();
            command.CommandText = 
                 "SELECT * "
                + "FROM smartstyle.table_changes_logger "
                + "WHERE  Updated > @accessories AND Table = 'accessories' ; "
                + "SELECT * "
                + "FROM smartstyle.table_changes_logger "
                + "WHERE  Updated > @cosmetics AND Table = 'cosmetics' ; "
                + "SELECT * "
                + "FROM smartstyle.table_changes_logger "
                + "WHERE  Updated > @cloths AND Table = 'cloths' ; "
                + "SELECT * "
                + "FROM smartstyle.table_changes_logger "
                + "WHERE  Updated > @hair AND Table = 'hair'";

            command.Parameters.Add("@cloths", MySql.Data.MySqlClient.MySqlDbType.Timestamp).Value = cloths.ToString("yyyy-MM-dd HH:mm:ss");
            command.Parameters.Add("@hair", MySql.Data.MySqlClient.MySqlDbType.Timestamp).Value = hair.ToString("yyyy-MM-dd HH:mm:ss");
            command.Parameters.Add("@accessories", MySql.Data.MySqlClient.MySqlDbType.Timestamp).Value = accessories.ToString("yyyy-MM-dd HH:mm:ss");
            command.Parameters.Add("@cosmetics", MySql.Data.MySqlClient.MySqlDbType.Timestamp).Value = cosmetics.ToString("yyyy-MM-dd HH:mm:ss");

            using (var reader = command.ExecuteReader())
            {
                do
                {
                    while (reader.Read())
                    {
                        NewRows[0].Add(reader.GetString(1));
                        NewRows[1].Add(reader.GetString(2));
                        NewRows[2].Add(reader.GetString(3));
                        NewRows[3].Add(reader.GetString(4));
                    }

                } while (reader.NextResult());

            }
        }
 }

但这不起作用我从 mysql 收到以下一般错误我不明白 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在 'Table = 'accessories' 附近使用的正确语法; SELECT * FROM smartstyle.table_changes_logger WHERE Upd' 在第 1 行

最佳答案

你需要逃脱reserved words in MySQL就像带有反引号的table

SELECT * 
FROM smartstyle.table_changes_logger 
WHERE  Updated > @accessories 
AND `Table` = 'accessories'

关于mysql - 如何在一次查询或往返中对同一个表进行两次选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18101223/

相关文章:

mysql - 仅返回 Mysql 查询中的特定行

c# - 如何编写返回动态对象的扩展方法?

c# - StructureMap 生命周期范围

javascript - 如何在单击一个链接按钮时调用 javascript 和代码隐藏函数?

c# - 在 C# 中使用数组实例化 IEnumerable<IEnumerable<T>>

mysql - 来自 TSV 文件的 Seed Rails 数据库 (MySQL)

mysql - 臃肿的 innodb 数据文件(ibdata1)以及如何回收空间?

mysql - mysql中的 "three way data binding"怎么办?

mysql - 查询异常(23000)SQLSTATE [23000] : Integrity constraint v1452

c# - 具有默认值的 C# 参数如何为空?