【发布时间】:2019-05-31 10:09:53
【问题描述】:
伙计们,我在 SQLite 中有以下查询:
select license, username from check_table where
(
username not in (
select username from Address
)
) order by license, username;
Address 是另一个表。有趣的是:Address 没有usernamecolumn!!
详情:
- 结果:
Query finished in 0.004 second(s) - 如果我修改
username部分(例如修改为userrname),我会收到no such column错误,这完全没问题 - 它永远不会返回任何结果,即使我在子选择中将
username替换为mail_username(实际上存在) - 这完全奇怪,因为它确实应该这样做。
现在,我的问题是:为什么我在这里没有收到错误消息?!这是否与我从未得到任何结果的事实有关?
【问题讨论】:
-
我无法想象这实际上是可重现的。在命令行上运行
SELECT username FROM Address会发生什么?这会返回任何内容或给出错误吗? -
此代码也适用于 MySql、SQL Server、Postgresql 等。
username是来自check_table的列 -
check_table有该列,并且没有明确告诉解析器它应该使用哪个表来搜索从最本地的列,这里是address,到最全局的,这里是check_table,然后瞧,在check_table中找到一列username。规避像<table name or alias>.<column name>这样的明确限定列。