[英]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.