繁体   English   中英

我可以从同一列中选择多个值吗

[英]Can I SELECT more than one value from the same column

我正在尝试使用单个MySql.Data SELECT语句从多行获取值。

我尝试使用以下代码但失败了。 错误说

第 # 行存在语法错误

在此处输入图片说明

MySqlConnection mysqlcon = new MySqlConnection(M_str_sqlcon);

MySqlCommand mysqlcom = new MySqlCommand(
    "SELECT value FROM metatable WHERE(ProductID = 16 AND MetaKey = 'SKU') AND " +
    "SELECT value FROM metatable WHERE(ProductID = 16 AND MetaKey = 'Price') AND " +
    "SELECT value FROM metatable WHERE(ProductID = 16 AND MetaKey = 'Sold') AND " +
    "SELECT value FROM metatable WHERE(ProductID = 16 AND MetaKey = 'SoldDate')"
, mysqlcon);

MySqlDataReader r = mysqlcom.ExecuteReader(CommandBehavior.CloseConnection);

prodMeta.Add(new ProductMeta{
    ProductSKU = r.GetString(0),
    RegularPrice = r.GetDouble(1),
    SoldCount = r.GetInt32(2),
    SoldDate = r.GetString(3)
});

mysqlcon.Close();

您可以像这样简单地使用in运算符,而不是重复使用无效的Select语句:

SELECT value 
FROM metatable 
WHERE ProductID = 16 AND MetaKey in ('SKU','Price', 'Sold', 'SoldDate')

而且你不需要在 where 后面加上括号。

您可以将查询修改为 UNION 所有输出,如下所示。 Union 组合了 2 个或更多查询的结果(确保您有相同顺序的相似列)

MySqlConnection mysqlcon = new MySqlConnection(M_str_sqlcon);

MySqlCommand mysqlcom = new MySqlCommand(
    "SELECT value FROM metatable WHERE(ProductID = 16 AND MetaKey = 'SKU') UNION " +
    "SELECT value FROM metatable WHERE(ProductID = 16 AND MetaKey = 'Price') UNION " +
    "SELECT value FROM metatable WHERE(ProductID = 16 AND MetaKey = 'Sold') UNION " +
    "SELECT value FROM metatable WHERE(ProductID = 16 AND MetaKey = 'SoldDate')"
, mysqlcon);

MySqlDataReader r = mysqlcom.ExecuteReader(CommandBehavior.CloseConnection);

prodMeta.Add(new ProductMeta{
    ProductSKU = r.GetString(0),
    RegularPrice = r.GetDouble(1),
    SoldCount = r.GetInt32(2),
    SoldDate = r.GetString(3)
});

mysqlcon.Close();

但是,由于您是从本示例中的同一个表中提取数据,因此您可以使用 OR 组合以下条件:

MySqlConnection mysqlcon = new MySqlConnection(M_str_sqlcon);

MySqlCommand mysqlcom = new MySqlCommand(
    "SELECT value FROM metatable WHERE(ProductID = 16 AND MetaKey = 'SKU')  OR (ProductID = 16 AND MetaKey = 'Price') OR (ProductID = 16 AND MetaKey = 'Sold') OR (ProductID = 16 AND MetaKey = 'SoldDate')"
, mysqlcon);

MySqlDataReader r = mysqlcom.ExecuteReader(CommandBehavior.CloseConnection);

prodMeta.Add(new ProductMeta{
    ProductSKU = r.GetString(0),
    RegularPrice = r.GetDouble(1),
    SoldCount = r.GetInt32(2),
    SoldDate = r.GetString(3)
});

mysqlcon.Close();

或者您可以使用 IN 运算符,如下所示:

MySqlConnection mysqlcon = new MySqlConnection(M_str_sqlcon);

MySqlCommand mysqlcom = new MySqlCommand(
    "SELECT value FROM metatable WHERE ProductID = 16 AND MetaKey IN ('SKU','Price','Sold','SoldDate')"
, mysqlcon);

MySqlDataReader r = mysqlcom.ExecuteReader(CommandBehavior.CloseConnection);

prodMeta.Add(new ProductMeta{
    ProductSKU = r.GetString(0),
    RegularPrice = r.GetDouble(1),
    SoldCount = r.GetInt32(2),
    SoldDate = r.GetString(3)
});

mysqlcon.Close();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM