在谷歌大查询中获得完全加入,在大查询中保持所有频率组合,让我只为所有类型的加入提供左加入

Posted

技术标签:

【中文标题】在谷歌大查询中获得完全加入,在大查询中保持所有频率组合,让我只为所有类型的加入提供左加入【英文标题】:Get full join in google big query keeping the all frequecy combination in bigquery giving me only left join for all kind of join 【发布时间】:2020-03-13 13:20:42 【问题描述】:

我正在尝试使用 Id 加入 2 个表,以便所有组合的频率都存在。但是当我使用连接(左,右)时,我仍然得到内连接或左连接输出。

这是一张桌子

b

我期待输出

我试过实际的代码

select 
    act.action, 
    dvr.dateofdel, 
    dvr.output   
FROM internal.actions as act 
Right join internal.deliveries as dvr 
    ON dvr.id= act.id 

我尝试了多个连接,但结果仍然相同..

【问题讨论】:

请使用“简化”示例中的相同名称来制定您的要求,或者将您的示例调整为与查询中的名称相同 - 但仍要解释您想要实现的连接逻辑。 “强迫”我们进行疯狂的猜测(如下面的答案)只是浪费我们和你自己的时间o( 还是一团糟!你能用简单的英语解释你试图实现的逻辑吗!?同时,在提供更多细节之前投票结束 请在代码问题中给出minimal reproducible example--cut & paste & runnable code,包括最小的代表性示例输入作为代码;期望和实际输出(包括逐字错误消息);标签和版本;明确的规范和解释。给出您可以给出的最少代码,即您显示的代码可以通过您显示的代码扩展为不正常。 (调试基础。)对于包含 DBMS 和 DDL(包括约束和索引)和输入为格式化为表的代码的 SQL。 How to Ask 停止尝试编写您的总体目标并从给定的代码中解释您的期望以及原因。 当明确这将是一个常见问题。在考虑发布之前,请阅读手册和谷歌任何错误消息或您的问题/问题/目标的许多清晰、简洁和精确的措辞,有和没有您的特定字符串/名称和站点:***.com 和标签;阅读许多答案。如果您发布问题,请使用一个短语作为标题。请参阅How to Ask 和投票箭头鼠标悬停文本。请use text, not images/links, for text--including tables & ERDs。仅将图像用于无法表达为文本或扩充文本的内容。 【参考方案1】:

您的查询与您的示例数据不匹配。

但根据您的问题陈述,我怀疑您想要:

select 
    act.ID_log, 
    act.ID_send_message, 
    act.action_date, 
    act.action,act.ID_email, 
    dvr.delivery_date, 
    act.email   
from internal.actions as act 
left join internal.deliveries as dvr 
    on  dvr.ID_send_message= act.ID_send_message  
    and dvr.delivery_date >= '2017-01-01'
    and dvr.delivery_date <  '2018-01-01'
where act.ID_send_message != 0

这将带来来自act 的所有满足where 子句中条件的记录,以及来自dvr 的信息;当dvr 中没有匹配项时,相应的列将显示null 值。查询中的重要部分是left joined 表上的所有条件都应该列在joinon 子句中(而不是在where 子句中)。

【讨论】:

是的 .. 名字太奇怪了,所以我用简单的名字来表示要求以便更好地解释。 @SouravRoy:查询是否产生预期结果? 没有它在任何匹配的地方加入左列,如果有人出现在第 2 列但不在第 1 列中,则它不会出现

以上是关于在谷歌大查询中获得完全加入,在大查询中保持所有频率组合,让我只为所有类型的加入提供左加入的主要内容,如果未能解决你的问题,请参考以下文章

在谷歌大查询中按未嵌套值分组时获取不同值的总和

如何在谷歌大查询中从谷歌云存储上传表格

左加入谷歌大查询

计算谷歌大查询中的每周留存率

谷歌大查询限制子句返回太多行

谷歌大查询命令行执行复杂查询给出错误意外'('