sql视图以获取与连接条件不匹配的记录

lsmd5eda  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(380)

我一直在想办法解决这个问题,但还没有找到解决办法。我处理的是一个sql视图,它的结果基于某些条件。我的sql视图如下

ALTER VIEW [dbo].[vAeoiCaseClose]
AS
SELECT  CaseReference, s.AccessNumber
FROM    dbo.AeoiSdtTemp s
JOIN AeoiCaseManagement c on c.AccessNumber = s.AccessNumber
JOIN AeoiCaptureLog a on a.AccessNumber = c.AccessNumber
WHERE   AscertainMethodId IS NOT NULL
AND c.StatusCode = 15 AND a.StatusCode IN (6, 13, 15) 
AND DATEDIFF(dd, s.LastModifiedDate, GETDATE()) <= 80 AND DATEDIFF(dd, a.LastModifiedDate, GETDATE()) <= 80
AND (
   (AscertainMethodId = 1 AND ExtendedStatusId = 1) 
OR (AscertainMethodId = 2 AND ExtendedStatusId = 1)
OR (AscertainMethodId = 2 AND ExtendedStatusId = 4)
OR (AscertainMethodId = 3 AND ExtendedStatusId = 1)
OR (AscertainMethodId = 3 AND ExtendedStatusId = 4)
OR (AscertainMethodId = 4 AND ExtendedStatusId = 1)
OR (AscertainMethodId = 5 AND ExtendedStatusId = 1)
OR (AscertainMethodId = 5 AND ExtendedStatusId = 4)
    )
GO

我必须添加另一个条件,这样这些记录也可以作为视图的结果。
条件:
在某些情况下,dbo.aeoisdtemp中可能有2条记录具有相同的 (AccessNumber) 但不一样 (AscertainMethodId) ,在这种情况下,记录在aeoicapturelog表中不可用,但我需要这些记录作为视图结果的一部分。
请建议。谢谢你的帮助。
例子:
dbo.aeoisdtemp公司
(accessnumber)-1111(确定方法ID)-3状态码=15
(accessnumber)-1111(确定方法ID)-5状态码=11
dbo.aeoicapturelog文件
没有记录
dbo.aeoicase管理
(accessnumber)-1111(确定方法ID)-3状态码=15

axr492tv

axr492tv1#

无需测试的快速而肮脏的起点:使用第二个别名(s1和s2而不是s,或s和s1)使用s.accessnumber将dbo.aeoisdtemp表连接到自身,如下所示:

...
FROM    dbo.AeoiSdtTemp s1
...
JOIN    dbo.AeoiSdtTemp s2 ON (
            s2.AccessNumber = s1.AccessNumber
            AND s2. AscertainMethodId != s1. AscertainMethodId
        )
...

另外,检查一下left vs right和inner vs outer连接,这将有助于确定上面的子句影响结果数据的方式。

相关问题