繁体   English   中英

为什么“具有条款”中的未知列

[英]Why Unknown column in 'having clause'

以下代码运行良好:

select session_id
from playback
where session_id not in 
    (select session_id
     from playback a join ads b
     on timestamp between start_time and end_time
     and a.customer_id = b.customer_id)

我试图在子查询中更改以下部分:

 join on timestamp between start_time and end_time
    and a.customer_id = b.customer_id

 join on a.customer_id = b.customer_id
 having b.timestamp between a.start_time and a.end_time

但错误为: Unknown column 'b.timestamp' in 'having clause'

这里使用 have() 有什么问题?

当您在没有使用 Group By 的情况下使用 Have 时会出现此问题。

我没有时间测试这些,但这里有三种可能的方法可以重写您的语句:

没有分组依据

select session_id
from playback
where session_id not in 
    (select distinct a.session_id
     from playback as a 
          join ads as b
     on a.customer_id = b.customer_id
     where b.timestamp between a.start_time and a.end_time
)

随着分组

select session_id
from playback
where session_id not in 
    (select a.session_id
     from playback as a 
          join ads as b
     on a.customer_id = b.customer_id
     group by a.session_id
     having b.timestamp between a.start_time and a.end_time
)

通过不使用子查询

select distinct a.session_id
from playback as a
left join ads as b
on b.customer_id = a.customer_id
where a.timestamp not between start_time and end_time
and b.customer_id is not null

这是我们在这次旅程中共同找到的答案:

SELECT session_id 
FROM playback pb 
LEFT JOIN ads ad 
ON pb.customer_id = ad.customer_id 
AND ad.timestamp 
BETWEEN start_time and end_time 
WHERE ad.customer_id IS NULL 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM