使用SQL查找Missing Row

时间:2011-04-01 18:03:05

标签: tsql sql-server-2000

我有一张表TRANSACTIONS,其中有一列:

TRANSACTIONKEY (int) Primary Key
TRANSACTIONTYPEKEY (int) 
RECEIPTNUMBER (varchar)

TRANSACTIONTYPEKEY的值可以是1到50. 必须TRANSACTIONSTRANSACTIONTYPEKEY = 1然后可以有任何值其他TRANSACTIONTYPEKEY条目的数量 - 甚至是某些条目的重复条款(另一个问题是另一个时间)。

我被要求提供一份报告,其中显示的所有收据(RECEIPTNUMBER)都有TRANSACTIONTYPEKEY = 50 的条目,但没有TRANSACTIONTYPEKEY条目= 1 。管理层已经意外地确定了六打并且想知道全部范围,该表持有近50,000行交易。

这可能与SQL有关吗?我使用的是SQL Server 2000和T-SQL。

我试过了

SELECT RECEIPTNUMBER 
FROM   TRANSACTIONS 
WHERE  TRANSACTIONTYPEKEY = 50 
AND    TRANSACTIONTYPEKEY NOT IN (SELECT TRANSACTIONTYPEKEY FROM TRANSACTIONS WHERE TRANSACTIONTYPEKEY <> 1)

但是这个查询一直在继续!我必须取消它。

2 个答案:

答案 0 :(得分:2)

试试这个:

SELECT a.RECEIPTNUMBER  
    FROM TRANSACTIONS  a
 WHERE a.TRANSACTIONTYPEKEY = 50  
   AND  NOT EXISTS
                (
                    SELECT 1 
                      FROM TRANSACTIONS b
                     WHERE b.RECEIPTNUMBER = a.RECEIPTNUMBER 
                       AND b.TRANSACTIONTYPEKEY = 1
                )

答案 1 :(得分:1)

假设过滤器在TRANSACTIONTYPEKEY上,而JOIN在TRANSACTIONKEY上

SELECT T1.RECEIPTNUMBER 
FROM   TRANSACTIONS T1
WHERE
     T1.TRANSACTIONTYPEKEY = 50 
AND  NOT EXISTS (SELECT * FROM TRANSACTIONS T2
                       WHERE T2.RECEIPTNUMBER = T1.RECEIPTNUMBER --oops. fixed
                          T2.TRANSACTIONTYPEKEY > 1)