2013-11-22 25 views
-1
SELECT * 
FROM Customer 
INNER JOIN Ledger Entry on [No_] = [Customer No_] 
WHERE No_ NOT IN ([Posting Date] between '2013-10-01' and '2013-10-31')

BETWEEN条件不起作用。使用NOT IN时,BETWEEN条件不起作用

+0

尝试'SELECT * FROM 客户 上[NO_] = [客户NO_] 这里不是 '2013年10月1日' 之间[发布日期]和 '2013年10月31日' 内加入总帐项' –

+0

'条件不起作用。:: whatz错误? –

回答

4

这不是如何not in的作品,你比较No_这似乎是Id客户与Posting Date所以这应该失败。

我想你想这样的事情:

SELECT * 
FROM Customer c 
inner join [Ledger Entry] le on c.[No_] = le.[Customer No_] 
where c.[No_] not in (
         select l.[Customer No_] 
         from [Ledger Entry] l 
         where l.[Posting Date] between '2013-10-01' and '2013-10-31' 
        ) 

但对于这样的查询应该简化为:

SELECT * 
FROM 
Customer c 
inner join [Ledger Entry] le on c.[No_] = le.[Customer No_] 
where le.[Posting Date] < '2013-10-01' or le.[Posting Date] > '2013-10-31' 

不使用not inbetween在所有

+0

它应该是'OR',即'在哪里。[发布日期] <'2013-10-01'或者。[发布日期]>'2013-10-31'' –

+0

@HarshGupta true,fixed。非常感谢你。 – gzaxx

+0

非常感谢gzaxx。事实上,我是SQL世界的新手,我仍在学习。 – user3020464

0

首先,你的日期应该与另一个日期类型列进行比较。
其次,根据Aaron Bertrand,你应该避免使用BETWEEN进行日期,你可以通过文章了解他是对的。
所以intead,我建议你继续作为;

SELECT * FROM Customer 
inner join LedgerEntry 
on Customer.[No_] = LedgerEntry.[Customer No_] 
where LedgerEntry.[Posting Date] < '2013-10-01' and LedgerEntry.[Posting Date] > '2013-10-31'