2011-04-11 230 views
0

我使用的是C#控制台应用程序,以获得从MySQL数据库中的一些数据,我有一些问题得到的查询权帮助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,则不应该返回任何行,但会返回与第一个条件相匹配的所有记录(两者均存在)。

在此先感谢。

+0

没有太多的分析你的查询,查询中最明显的问题就是你指定日期参数的方式。你得到的东西被解释为一个算术表达式,'2011-04-03',它被相应地评估,然后当与子查询的结果进行比较时隐式转换为日期/时间值。为了将参数解释为日期,您需要将其作为单引号括起来,就像大多数答案所示。 – 2011-04-11 07:28:51

回答

0

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;

0

如果我读了你的问题的权利我相信你可以用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' 
1

尝试下面一个

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表两次不需要的内容,最好去一个内部联接,它将稳定您首先调用存在的一个和第二个sati通过编写where子句来实现。

0
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` 

不管怎样提防在查询日期...

0

更多或更少的这样。

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

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