C# MySql查询:获取在Customer和Customer_x_账单表中都有ID的所有客户
我正在使用一个C控制台应用程序从MySql数据库获取一些数据,但在正确获取查询时遇到了一些问题 现在的情况是: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
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,它被相应地计算,然后在与子查询的结果进行比较时隐式转换为日期/时间值。为了将参数解释为日期,您需要将其括在单引号中,就像大多数答案所建议的那样。