我有一个MySQL查询,我认为会引发异常,但事实并非如此。只想找出原因?查询是:
select count(distinct uid)
from nov_visit_20161201
where pv_listen>0
and uid in (select distinct uid from nov_visit_20161120 where pv_listen>0);
问题是表nov_visit_20161120没有pv_listen列,但查询效果很好。当我单独运行子查询时:
select distinct uid from nov_visit_20161120 where pv_listen>0
我得到了这个:“'where子句'中的未知列'pv_listen'。”
任何人都可以告诉我为什么?
答案 0 :(得分:1)
我几次观察同样的事情,解释可能是,子查询中的pv_listen
指的是主查询表。
考虑一种情况,您希望运行使用主查询列中的值的子查询,您如何编写它?你只需将列的名称放在子查询中,并在那里使用数据行的列值。因此,当在Sub查询表/数据集中找不到列时,它认为该列属于主查询,并且在您的情况下它发现相同。因此没有错误。
所以,它实际上是以
运行它select count(distinct uid)
from nov_visit_20161201
where pv_listen>0
and uid in (select distinct uid from nov_visit_20161120);
由于sub query
中的过滤器不会过滤任何记录。
答案 1 :(得分:0)
如果表中不存在该列,只需将其从where条件中删除:
select count(distinct uid)
from nov_visit_20161201
where pv_listen>0
and uid in (select distinct uid from nov_visit_20161120);