Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MySql查询:获取在Customer和Customer_x_账单表中都有ID的所有客户_C#_Mysql_Sql - Fatal编程技术网

C# MySql查询:获取在Customer和Customer_x_账单表中都有ID的所有客户

C# MySql查询:获取在Customer和Customer_x_账单表中都有ID的所有客户,c#,mysql,sql,C#,Mysql,Sql,我正在使用一个C控制台应用程序从MySql数据库获取一些数据,但在正确获取查询时遇到了一些问题 现在的情况是: SELECT * FROM Customer WHERE EXISTS ( SELECT * FROM Customer_x_Billing c WHERE Customer.`customer id` = c.customer_id) AND 2011 -04 -03 < ( SELECT last_changed FROM Customer_x_Billing c WHERE

我正在使用一个C控制台应用程序从MySql数据库获取一些数据,但在正确获取查询时遇到了一些问题

现在的情况是:

SELECT * FROM Customer
WHERE EXISTS ( SELECT * FROM Customer_x_Billing c WHERE Customer.`customer id` = c.customer_id)
AND 2011 -04 -03 < ( SELECT last_changed FROM Customer_x_Billing c WHERE Customer.`customer id` = c.customer_id )
ORDER BY Customer.`customer id`
我如何改进这个?
我想获取在Customer和Customer_x_账单表中都有ID的所有客户,在这种情况下,Customer_x_账单中的最后更改日期大于参数2011-04-03。如果我将日期设置为2012-04-03,则不应返回任何行,但它会返回与第一个条件匹配的所有记录,这两个条件都存在。

从客户c中选择c.*内部加入客户id=c.id上的客户id上的账单cb,其中DATEcb.last\U更改了>按c.id的“2011-04-03”订单

如果我没看错你的问题,我相信你可以通过内在的结合来实现这一点

SELECT *
FROM Customer c
INNER JOIN Customer_x_Billing b
    ON c.customer_id = b.customer_id
WHERE last_changed_date > '2011-04-03'
试试下面一个

SELECT * FROM Customer
INNER JOIN
Customer_x_Billing ON Customer.`customer id` = Customer.customer_id
WHERE last_changed > 2011 -04 -03
ORDER BY Customer.`customer id`
您查询的问题是,您正在扫描Customer_x_账单表两次,这是不需要的,最好使用一个内部联接,通过编写where子句,第一个条件是存在,第二个条件是满足

SELECT Customer.* FROM Customer c INNER JOIN Customer_x_Billing b
ON c.`customer id`=b.`customer id`
WHERE last_changed>'2011-04-03'
ORDER BY c.`customer id`

无论如何,要注意查询中的日期…

或多或少像这样

using (SqlConnection con = new SqlConnection(connectionString))
{
  using (SqlCommand cmd = new SqlCommand())
  {
    cmd.Connection = con;
    cmd.CommandText 
      = "SELECT * FROM Custromer c JOIN Customer_x_Billing cb ON c.'customer id' = cd.'customer id' Where last_change < @lastChangeDate";
    cmd.Parameters.AddWithValue("@lastChangeDate",  new DateTime(2011,04,03));
    using (SqlDataReader drd = cmd.ExecuteReader())
    {
      while (drd.Read())
      {
        // Read from data reader
      }
    }
  }
}

为了您的应用程序,您应该熟悉一些数据库教程,并尝试理解关系数据库的概念

在不进行太多分析的情况下,查询中最明显的问题是指定日期参数的方式。您得到的结果被解释为一个算术表达式2011-04-03,它被相应地计算,然后在与子查询的结果进行比较时隐式转换为日期/时间值。为了将参数解释为日期,您需要将其括在单引号中,就像大多数答案所建议的那样。