【发布时间】:2019-03-13 17:10:47
【问题描述】:
我正在尝试加入两个表;一个是关于媒体活动的报道信息,另一个是关于电视广告的报道......因为第二个表格不包含任何关于活动的信息,而且我现在真的不需要它,所以我将根据电视广告(此处为“creative_id”)以及日期。
问题是,大约有。第一个表中有 670 万条记录,所以我不明白为什么,当我运行这个时,我得到了超过 1700 万条...... :( 你能帮忙吗?
alter view halo2 as
select
h.date,h.channel,h.strategy,h.creative_id,h.programme,h.sub_programme,h.l_c_b,
h.media_plan_split,h.pu,h.conversion_type,h.conversion_new_or_upgrade,
case when h.conversion_new_or_upgrade like '%new%' then 1 else 0 end #acquisitions,
case when h.conversion_new_or_upgrade like '%upg%' then 1 else 0 end #upgrades,
case when h.conversion_contract_length like '%12%' then 12
when h.conversion_contract_length like '%24%' then 24
when h.conversion_contract_length like '%30%' then 1
else 0 end contract_length_in_months,
h.conversion_device_manufacturer,
h.conversion_device,
h.media_spend,
h.#halo,
ft.u10/100 as upfront_cost,
(ft.sales_value+cast(ft.u28 as float))/100 as monthly_cost
from halo h left join in_ft_conversion ft
on h.creative_id=ft.creative_id
and
h.date=ft.sales_date
【问题讨论】:
-
因为你有一对多的关系。如果您对另一个有多个匹配项的表执行
JOIN,则每个匹配项您将收到 1 行;不是所有的 1 行。 -
JOINs 的工作原理差不多。它们将一个表中的行与另一个表中的零、一或多行相关联。 -
这个不清楚。请给minimal reproducible example。通过参考文档来解释您认为 LEFT JOIN 的合理性以及您认为这不是您所得到的。 PS 了解什么是左连接返回:行内连接加上由空值扩展的不匹配左表行。作为左连接的一部分,始终知道您想要什么内连接。 PS 考虑表的 PK/UNIQUE 和 FK。
标签: sql sql-server join view left-join