我有4张桌子。
1只有网站名称。
3个表,其中包含网站名称以及针对不同用户类型的点击数量。
我需要针对每种用户类型对这些网站点击次数进行报告
网站Userype1hits Userype2hits Userype3hits
所以在选择部分我需要用一个名为noanswer的表进行交叉检查
喜欢
select *
from table
where site in (select site from noanswer)
所以根据我的理解,我需要使用join,在这种情况下正确加入?
如何加入此查询?
答案 0 :(得分:3)
您可以使用left join
:
select sn.*, t1.cnt, t2.cnt, t3.cnt
from sitenames sn left join
table1 t1
on t1.name = sn.name left join
table2 t2
on t2.name = sn.name left join
table3 t3
on t3.name = sn.name;
你的问题在字段名称上含糊不清。
left join
保留第一个表中的所有行,并匹配后续表中的行。它比right join
更常用,可能是因为它更容易阅读逻辑思维“我将保留所有这些行”。一系列right join
实际上将所有行保留在最后一个表中,因此您必须等待查看哪些行保留。
答案 1 :(得分:0)
我确实喜欢这个,用Google搜索了一些内容,因为即使我在这里得到答案,我还没有得到它的工作,加入对我来说是全新的。内部用户,外部用户等只是假的发布我在这里做的事情,因为我不能使用真实姓名。
select s.Site,s2.Total_hits as 'Internalusers',s3.Total_Hits as 'ExternalUsers',
s4.Total_hits as 'Comapany2users' from Database.Table as S
left outer join HITAnalyze.dbo.Internal as s2 on s2.site = s.Site
left outer join HITAnalyze.dbo.External1 as s3 on s3.site = s.Site
left outer join HITAnalyze.dbo.Company2 as s4 on s4.site = s.Site