一个SQL大脑冻结

时间:2011-06-11 13:12:31

标签: tsql

我希望退回自指定日期以来未记录任何订单的任何联盟会员。通过此查询应该简单易懂。

select * from affiliate where 
idUser not  in ( 
  select idAffiliate from Orders
  where orderDate > '06/01/11'
)

affiliate表有一个idUser字段,它是Orders表的idAffiliate的外键。上面没有记录,即使我知道我有几十个自本月初以来没有下订单的附属公司。如果我将日期更改为'07 / 01/11' - 所有联盟会员记录都会返回(显然),但会验证我是否使用了正确的实体名称。

非常感谢

2 个答案:

答案 0 :(得分:4)

看起来您必须在嵌套查询中将idAffiliate更改为idUser。 在这种情况下,最好使用EXISTS或NOT EXISTS而不是IN

select * from affiliate a 
where not exists ( 
  select 1 from Orders where orderDate > '06/01/11'
  and Orders.idUser = a.idUser
)

答案 1 :(得分:0)

使用左连接:

select a.* 
from affiliate a
left join Orders o
    on a.idUser= o.idAffiliate
    and o.orderDate > '06/01/11'
where o.idAffiliate is null