SQL 存在命令

SQL Exists command

我有一个要优化的查询。我想尝试使用 'EXISTS' 命令,而不是 'IN' 命令,但每当我尝试实施 'EXISTS' 时,它 returns 的行数比应有的多。

查询 'IN':

SELECT count(*)
FROM echosign_devbox.participation as p
left join echosign_devbox.agreement as a
on p.agreement_id=a.agreement_id
where a.status not in ('SIGNED', 'ABANDONED', 'EXPIRED', 'ABANDONED_BEFORE_SEND');

有谁知道我应该如何更改才能使用 'EXISTS' 命令?谢谢!

SELECT  count(*)
    FROM  echosign_devbox.participation as p
    WHERE NOT EXISTS ( SELECT 1
            FROM echosign_devbox.agreement as a
            WHERE  p.agreement_id = a.agreement_id
              AND  a.status IN ('SIGNED', 'ABANDONED', 'EXPIRED', 'ABANDONED_BEFORE_SEND' ) );

a 需要 INDEX(agreement_id, status)

这会给出 'correct' 答案吗?

SELECT COUNT(*)
    FROM echosign_devbox.agreement
    WHERE status NOT IN ('SIGNED', 'ABANDONED', 'EXPIRED', 'ABANDONED_BEFORE_SEND')

表之间有什么关系? 1:1? 1:many?