IN与EXISTS / JOIN的结果不同-为什么?

时间:2019-05-31 18:16:07

标签: sql sqlite

my last question的跟进。 请注意,这不是重复的other question缺少了我拥有的WHERE子句;)。

我认为我对同一件商品有两种变体,并进行了健全性检查。我的问题是-一个什么都不返回,而另一个返回我期望的值。我的问题是我不明白为什么-有人可以在这里帮助我吗?

一切都是SQLite3。

变种1:

select
    z.license,
    z.username
from
    check_table as z
where
    (
        z.username not in (
            select a.mail_username
            from Address as a 
        )
    )
order by
    license, username;

变种2:

select
    z.license,
    z.username
from
    check_table as z
where
    (
        not exists (
            select 1
            from Address as a
            where z.username = a.mail_username
    )
)
order by
    license, username;

健全性检查:

select
    z.username,
    a.mail_username
from
    check_table as z
    left join Address as a
        on z.username = a.mail_username
where
    a.mail_username is null
order by
    mail_username

结果:

  • 变体1不返回任何内容,但应返回IMO(0.004秒)
  • 变体2返回265个结果(0.097秒)
  • 变体3返回265个结果(0.004秒)

我完全迷失了,因为NOT IN在其他组合中也能正常工作,而我看不出有什么区别。

更新:好的,它是重复的:D。为了我的辩护-实际的原件名称非常简短;)

0 个答案:

没有答案