![](/img/trans.png)
[英]Single SQL query to select all customers together with all the orders belonging to each of the customer?
[英]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.