繁体   English   中英

MySql查询:获取在Customer和Customer_x_Billing表中均具有其ID的所有客户

[英]MySql query: get all customers that has their ID in both Customer and Customer_x_Billing table

我正在使用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_Billing表中都具有其ID的客户,并且Customer_x_Billing中的last_changed日期大于参数(在这种情况下为2011-04-03)。 如果我将日期设置为2012-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_Billing表,最好进行一个内部联接,这将使您首先通过编写where子句来满足存在和满足的条件。

SELECT c.* FROM Customer c INNER JOIN Customer_x_Billing cb ON cb.customer_id = c.id WHERE DATE(cb.last_changed) > '2011-04-03' ORDER BY c.id;

如果我没看错您的问题,我相信您可以使用INNER JOIN实现这一目标...

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 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
      }
    }
  }
}

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

暂无
暂无

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

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