2017-01-18 187 views
0

下面是示例查询如果IN子查询没有行,如何返回所有行?

Select * 
    from tb.Users u 
where u.Approved = 1 
    and u.userID IN (SELECT us.UserID us 
         FROM tb.UserStatementes us 
         WHERE us.LogDate between date1 and date2) 

,我需要选择那些在次IN子句但是如果子查询未返回,我需要选择所有用户(即忽略IN子句)

+1

您可以添加到您现有的和'OR NOT EXISTS(SELECT us.UserID我们 FROM tb.UserStatementes我们 WHERE us.LogDate DATE1和date2之间)' –

回答

6
Select * 
    from tb.Users u 
where u.Approved = 1 
    and (
    u.userID IN (SELECT us.UserID us 
         FROM tb.UserStatementes us 
         WHERE us.LogDate between date1 and date2 
         ) 
    or not exists (
     select 1 
      from tb.UserStatementes us 
      where us.LogDate between date1 and date2 
     ) 
    ) 
记录所有用户
1
Select * 
    from tb.Users u 
where u.Approved = 1 
    and (exists  (SELECT 1 
          FROM tb.UserStatementes us 
          WHERE us.LogDate between date1 and date2 
          AND us.USERID = u.USERID) 
     or not exists (SELECT 1 
          FROM tb.UserStatementes us 
          WHERE us.LogDate between date1 and date2) 
     )