我想将此查询转换为不存在。将NOT IN转换为NOT EXISTS SQL firebird
SELECT * FROM MYCARD T1
WHERE T1.IDMONEY = 5 AND T1.IDCARD = 80
AND EXISTS (
SELECT IDCARD, YEAR, MONEY
FROM MYCARD T2
WHERE T2.IDCARD = T1.IDCARD
AND T2.YEAR = T1.YEAR
AND T2.MONEY = T1.MONEY
GROUP BY T2.IDCARD, T2.YEAR, T2.MONEY
HAVING COUNT(T2.IDCARD) > 1
)
AND T1.ID not in ( -- THIS NOT IN TO NOT EXISTS
select min(ID)
from MYCARD
WHERE IDMONEY = 5
AND IDCARD = 80
group by IDCARD, YEAR
)
我想获得ID不同于min(ID)的值。这不是很好,但我需要更优化的查询。我试图用这样的事情,但是这似乎是正确的,但它不是最优化:
AND EXISTS (
select min(ID)
from MYCARD
WHERE IDMONEY = 5
AND IDCARD = 80
group by IDCARD, YEAR
HAVING T1.ID = MIN(ID)
)
它返回不在其中的行。我可以添加一些像HAVING T1.ID = min(ID)?? – ktos1234
这不会产生正确的结果,因为它不相关。 –