我有一张表TRANSACTIONS
,其中有一列:
TRANSACTIONKEY (int) Primary Key
TRANSACTIONTYPEKEY (int)
RECEIPTNUMBER (varchar)
TRANSACTIONTYPEKEY
的值可以是1到50. 必须是TRANSACTIONS
行TRANSACTIONTYPEKEY
= 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)
但是这个查询一直在继续!我必须取消它。
答案 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)