相关子查询的解决方法
Workaround for a correlated subquery
我需要在不使用相关子查询的情况下运行以下连接,因为我只能使用 Hive 或 Presto,这两种方法都因我使用相关子查询而失败。
我已经将其分解为 MWE。我有每个用户的 table 和他们的 18 岁生日。每个用户每次访问电影院时,我还有另一个 table。我只想在用户最后一次访问我的电影院时合并。下面是适用于本机 SQL 的代码。
不需要我加入访问电影院的用户的每个实例的最有效解决方法是什么(它太大了)。
SELECT
people.*,
tickets.uid
tickets.date
FROM all_customers as people
JOIN tkting as tickets
on people.uid = tickets.uid
and tickets.date = (select
lastvisit.date
from tickets as lastvisit
where
lastvisit.uid = people.uid
and lastvisit.date < people.birthday_18
order by lastvisit.date asc
limit 1)
而不是这个内部查询:
SELECT lastvisit.date
...
ORDER BY lastvisit.date ASC
LIMIT 1
你可以试试:
SELECT min(lastvisit.date)
...
我需要在不使用相关子查询的情况下运行以下连接,因为我只能使用 Hive 或 Presto,这两种方法都因我使用相关子查询而失败。
我已经将其分解为 MWE。我有每个用户的 table 和他们的 18 岁生日。每个用户每次访问电影院时,我还有另一个 table。我只想在用户最后一次访问我的电影院时合并。下面是适用于本机 SQL 的代码。
不需要我加入访问电影院的用户的每个实例的最有效解决方法是什么(它太大了)。
SELECT
people.*,
tickets.uid
tickets.date
FROM all_customers as people
JOIN tkting as tickets
on people.uid = tickets.uid
and tickets.date = (select
lastvisit.date
from tickets as lastvisit
where
lastvisit.uid = people.uid
and lastvisit.date < people.birthday_18
order by lastvisit.date asc
limit 1)
而不是这个内部查询:
SELECT lastvisit.date
...
ORDER BY lastvisit.date ASC
LIMIT 1
你可以试试:
SELECT min(lastvisit.date)
...