使用不存在的列时,嵌套的SELECT“有效”-为什么?

时间:2019-05-31 10:09:54

标签: sql sqlite

人们,我在SQLite中有以下查询:

select license, username from check_table where
(
    username not in (
        select username from Address
    )
) order by license, username;

Address是另一个表。有趣的部分是:Address没有username列!

详细信息:

  • 结果:Query finished in 0.004 second(s)
  • 如果我修改username部分(例如修改为userrname),则会收到no such column错误,这完全没问题
  • 即使我在子选择中将username替换为mail_username(实际上存在),它也永远不会返回任何结果-完全奇怪,因为它确实应该如此。

现在,我的问题是:为什么我在这里没有出现错误?这与我从未获得任何结果有关吗?

1 个答案:

答案 0 :(得分:2)

您要从username而不是check_table表中选择address

尝试添加别名并签出:

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

我敢打赌,如果您尝试使用select a.username...,则会收到有关不存在的列的错误消息。

为此,在查询中始终使用多个表时,最好使用别名。