[英]Outer Left Join on the same table
我正在使用此代码对过去70天内出现的“问题”主症状中出现的所有“名称”进行排序,我已经打开和关闭了列,因此仅对仍然存在的任何问题感兴趣。
select
name, LastEDT
from
vw_UserView_ME_Open
where
received between dateadd(day, datediff(day, 0, getdate()) - 70, 0)
and dateadd(day, datediff(day, 0, getdate()), 0)
and MasterSymptom = 'Problem'
and closed is null
order by
'LastEDT' asc;
我要做的是在同一张表上创建一个外部左联接,以引用针对“名称”记录的所有其他主症状。
我在同一张桌子上进行联接的经历非常有限(不读),因此我有点迷茫,无法从我在这里阅读的帖子中弄清楚。
有人可以帮忙吗?
这可能会让您入门吗? 基本上,如果谨慎使用别名,则自我联接与其他联接完全相同。 我的示例只是查找名称相同的所有条目,其中Master Symptom =“ Problem”,然后对这些条目进行计数。 您可能想对结果做些不同的事情?
SELECT
o.name,
o.LastEDT,
COUNT(r.*) AS related_problems
FROM
vw_UserView_ME_Open o
LEFT JOIN vw_UserView_ME_Open r ON r.name = o.name AND r.MasterSymptom = 'Problem'
WHERE
o.received BETWEEN CONVERT(DATE, DATEADD(DAY, -70, GETDATE())) AND CONVERT(DATE, GETDATE())
AND o.MasterSymptom = 'Problem'
AND o.closed IS NULL
GROUP BY
o.name,
o.LastEDT
ORDER BY
o.LastEDT;
我同时“整理”了您的SQL。
请记住,因为这是LEFT JOIN,所以您不能在WHERE子句中添加相关表的任何条件,或者实际上是在将LEFT JOIN变成INNER JOIN。 因此,如果您还想测试关闭的IS NULL,则可以添加:
r.closed IS NULL
到LEFT JOIN条件的末尾,而不是WHERE子句。
实际上,这并不是最佳示例,因为您实际上可以在不破坏JOIN的情况下将额外的IS NULL条件添加到WHERE子句中。 但是,结果可能与预期不符,因为这将意味着:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.