【发布时间】:2019-04-27 20:22:47
【问题描述】:
我有一个视图vwDocumentLinks,数据如下:
我有另一个表RiskTypes,数据如下。
表格和视图之间的链接是:Idx25 = Risk Type 和 LinkDocNo = DocumentType。我想要实现的是在RiskTypes 中获得DocumentType,这不在vwDocumentLinks foreach BaseValue 和Idx25 = RiskType 的视图中。使用单个 BaseValue 的示例将是:
SELECT * FROM RiskTypeDocuments WHERE RiskType = 'BUSINESS LIMITED COMPANY' AND DocumentType NOT IN (SELECT LINKDOCNO FROM DBO.VWLINKS WHERE BaseValue = '00007573-1637-4B8E-9374-730AF58BCFB6')
我尝试了以下查询,但它没有按预期工作。任何帮助将不胜感激。我是 SQL 新手
SELECT dbo.RiskTypeDocuments.DocumentType,
dbo.RiskTypeDocuments.RiskType,
dbo.vwLinks.BaseValue AS Document
FROM dbo.vwLinks LEFT OUTER JOIN
dbo.RiskTypeDocuments ON dbo.vwLinks.LinkDocNo =
dbo.RiskTypeDocuments.DocumentType AND dbo.vwLinks.Idx25 =
dbo.RiskTypeDocuments.RiskType
WHERE dbo.RiskTypeDocuments.DocumentType IS NOT NULL
ORDER BY Document
注意:我无法更改架构。我只能从现有表中创建视图。 来自两个数据集的样本数据:vwDocumentLinks & RiskTypeDocuments
【问题讨论】:
-
WHERE 子句条件使得 LEFT JOIN 返回常规的 INNER JOIN 结果。
-
我刚刚尝试删除
WHERE子句,结果几乎相同,只是其他列返回NULL -
您希望返回这些新值吗?如果是,请保持 LEFT JOIN。如果没有,请切换到 INNER JOIN。 (在任何情况下都不需要 WHERE 子句。)
-
你是对的,切换到
inner join后返回的结果还是一样的。但同样,这不是预期的结果 -
将样本数据作为格式化文本而不是图像将是一个很好的 +。此外,像 1、2、3 这样的基本值而不是 172371237127124783123、717617837373737373763 和 837373739828936374893 会让事情变得更容易。
标签: sql sql-server join sql-server-2012 ssms