我正在尝试评估系统中某个给定月份中进行的事务在对帐过程中的启动次数。SELECT IN失败 - 大型数据集
交易参考可以在上个月创建,因此我试图从最终计数中排除这些交易 - 第一个想法是使用“WHERE IN”类型的方法,但结果始终为0,这是肯定的当我单独执行查询时出错,子查询中有条目应该被排除。
我读过“WHERE IN”类型的查询不可靠,特别是当子查询中有大量数据集返回时,但我不知道如何在这种情况下重新实现这个目标,并且如果这样做的方式存在缺陷,则可以继续前进。
当前查询如下 - 感谢您的帮助:
SELECT Count(DISTINCT TransactionRef)
FROM Payments
WHERE Month(PaymentDate) = 8
AND Year(PaymentDate) = 2011
AND TransactionRef NOT IN
(SELECT DISTINCT TransactionRef
FROM Payments WHERE PaymentDate < '20110801')
编辑 确定进一步的答案,这似乎是一个空值在做我错了...感谢 - 这里是编辑的代码万一有人绊倒在这里的未来:
SELECT Count(DISTINCT TransactionRef)
FROM Payments
WHERE Month(PaymentDate) = 8
AND Year(PaymentDate) = 2011
AND TransactionRef NOT IN
(SELECT DISTINCT TransactionRef
FROM Payments WHERE TransactionRef IS NOT NULL AND PaymentDate < '20110801')
您probaly有''TransactionRef一个'NULL'值。这总是会导致'NOT IN'返回零结果。 –
顺便说一句:你在哪里读过''WHERE IN“类型的查询是不可靠的?我建议无视来自同一来源的任何其他内容。 –
谢谢:)谷歌的力量完全发送一个在一个荒谬的切线看起来。 – Chris