【问题标题】:SQL view to get records that don't match the JOIN conditionSQL 视图获取与 JOIN 条件不匹配的记录
【发布时间】:2018-09-22 00:29:09
【问题描述】:

我一直在努力解决这个问题,但还没有找到解决方案。我正在处理一个 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.AeoiSdtTemp 中可能有 2 条记录具有相同的 (AccessNumber) 但不同的 (AscertainMethodId) ,在这种情况下,该记录在 AeoiCaptureLog 中将不可用strong> 表,但我需要这些作为视图结果的一部分。

请提出建议。感谢帮助。

例子:

dbo.AeoiSdtTemp

  • (AccessNumber) - 1111 (AscertainMethodId) - 3 StatusCode = 15

  • (AccessNumber) - 1111 (AscertainMethodId) - 5 StatusCode = 11

dbo.AeoiCaptureLog

  • 没有记录

dbo.AeoiCaseManagement

  • (AccessNumber) - 1111 (AscertainMethodId) - 3 StatusCode = 15

【问题讨论】:

  • 您是否尝试过左连接而不是左连接 AeoiCaptureLog a on a.AccessNumber = c.AccessNumber
  • @Fact 对于视图中的现有条件,我当然需要所有 3 个表中的记录,但我还需要一个异常条件,即 AeoiCapturelog 中没有记录。

标签: mysql sql sql-server join sql-view


【解决方案1】:

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

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

此外,请查看 LEFT 与 RIGHT 和 INNER 与 OUTER 连接,这将帮助您确定上述子句对结果数据的影响方式。

【讨论】:

  • 感谢您的回复,但如果我在 AeoiSDT 上使用 self Join 以及 AeoiCaptureLog 和 AeoiCaseManagement 上的 Join,它不会返回记录,因为它在 AeoiCapturelog 中不可用
  • 您能否提供两种可能情况的样本数据?此外,您的示例 VIEW 并没有明确说明哪些字段位于哪些表中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-11
  • 2022-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多