SQL查询结构未返回正确的结果

时间:2017-05-07 12:56:15

标签: sql

我有以下查询

SELECT eventID, description, title, event_start, event_end, userID
FROM SIS_EVENT 
WHERE userID=1 OR (userID=0) AND
      event_start >=01/01/2017 AND event_end <=10/10/2017

这将有效,但只选择userID为1的记录,并且不会返回任何userID为0的记录

我觉得是喜欢我的SQL的结构,但我不知道我做错了什么 任何帮助表示赞赏

以下是代码中的SQL

SqlCommand cmd = new SqlCommand("SELECT eventID, description, title, 
event_start, event_end, userID FROM SIS_EVENT WHERE userID IN (0, @user_id) 
AND event_start >= '@start' AND event_end <= '@end' ", con); 

        cmd.Parameters.AddWithValue("@start", start);
        cmd.Parameters.AddWithValue("@end", end);
        cmd.Parameters.AddWithValue("@user_id", HttpContext.Current.Session["userid"]);

3 个答案:

答案 0 :(得分:0)

我认为你应该尝试在两个逻辑比较之间使用括号。

答案 1 :(得分:0)

尝试使用括号来界定您的条件。 这将有效:

SELECT eventID, description, title, event_start, event_end, userID FROM SIS_EVENT WHERE (userID=1 OR userID=0) AND event_start >=01/01/2017 AND event_end <=10/10/2017

或者由于条件适用于同一列,您可以使用&#34; IN&#34;:

SELECT eventID, description, title, event_start, event_end, userID FROM SIS_EVENT WHERE (userID=1 OR userID=0) AND event_start >= 01/01/2017 AND event_end <= 10/10/2017;

答案 2 :(得分:0)

首先你的问题是你把条件变成了条件 进入 - &gt; userId等于1或其余为
关于日期时间比较需要一些转换,这是我的代码改进:

 SELECT eventID, description, title, event_start, event_end, userID
        FROM SIS_EVENT 
        WHERE userID IN (0, 1) AND
             Convert(DateTime, event_start) >=Convert(DateTime,'2017-01-01',106) AND
             Convert(DateTime, event_end) <=Convert(DateTime,'2017-10-10',106);