为什么我的左外连接不起作用? [英] Why isn't my left outer join working?

查看:72
本文介绍了为什么我的左外连接不起作用?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述





这很奇怪。我有一些CTE,它带有row_number的结果列表。 1是最近的,2是最近的第二个等等。



我从这个表中选择结果然后再次将它作为带有左外连接的第二个表加入。我有一个Where子句,所以第一个选择row = 1,第二个行= 2.



目前没有结果,其中row = 2.我希望这些列为空



当我有第一张桌子时,我得到66张结果

当我加入第二张桌子时,我没有!



我做错了什么?



这里是代码(修剪到基本部分)

Hi,

This is odd. I have a number of CTE's which lead up to a list of results with a row_number. 1 is most recent, 2 is second most recent, etc.

I select the results from this table then join it again as a second table with a left outer join. I have a Where clause for each so the first selects row=1 and the second row = 2.

There are currently no results where row = 2. I expect these columns to be null

When I have just the first table, I get 66 results
When I join the second table, I get none!

What am I doing wrong?

here is the code (trimmed to the essential parts)

	with daily_results as(--Gets one result a day so averages later are not oddly waited when two runs occurred in a single day
		select
		   mr.[moz_result_id] as id,
		   mr.[moz_result_url_id] as url_id,
		   convert(datetime,convert(date, mr.[moz_result_datetime])) as [datetime],
		   AVG(cast(mr.[moz_result_page_authority] as float)) as page_authority,
		   AVG(cast(mr.[moz_result_domain_authority] as float)) as domain_authority,
		   AVG(cast(mr.[moz_result_moz_trust] as float)) as trust,
		   row_number() over (partition by mr.[moz_result_url_id] order by convert(datetime,convert(date, mr.[moz_result_datetime])) desc) as num
		from dbo.moz_results mr
		group by 
		   mr.[moz_result_id] ,
		   mr.[moz_result_url_id] ,
		   convert(datetime,convert(date, mr.[moz_result_datetime])) 
	)
, moz as (
    select
       mr.[id]
      ,mr.[url_id]
      ,mr.[datetime]
      ,mr.[page_authority]
      ,mr.[domain_authority]
      ,mr.[trust]
      ,row_number() over (partition by mr.[url_id] order by mr.[datetime] desc) as num
    from daily_results mr
) -- adds the row_number as num
	select
	   mr.[id]
      ,mr.[url_id]
      ,mr.[datetime]
      ,mr.[page_authority]
      ,mr.[domain_authority]
      ,mr.[trust]
      ,prev.[page_authority] as prev_page_authority
      ,prev.[domain_authority] as prev_domain_authority
      ,prev.[trust] as prev_trust
   from moz mr
   left outer join moz prev on mr.url_id = prev.url_id
   where 
      mr.num = 1 
   and prev.num = 2 -- change this to 1 and all results return

推荐答案

您所做的基本上是url_id组内的交叉连接:mr x上一个。您需要限制连接条件以获得正确的结果:

What you do there is basically cross join within url_id group: mr x prev. You need to restrict the join condition to get the correct result:
left outer join moz prev on mr.url_id = prev.url_id and prev.num = 2
where mr.num = 1 


这篇关于为什么我的左外连接不起作用?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆