【问题标题】:Create a SQL Server view using a table that have records that don't exist使用包含不存在记录的表创建 SQL Server 视图
【发布时间】:2018-01-16 17:43:37
【问题描述】:

我正在尝试使用一个表在 SQL Server 中创建一个视图,该表具有一个值列表,我想将其他表中的许多其他列连接到它上面。

对于我的每个“键”值都有值的任何记录都可以正常工作,但是当我想添加一个没有每个“键”值记录的表时,它只会排除该值。我希望它设置为<NULL>,而不是完全排除它。

+--------+--------+--------+    
| KeyNum | Value1 | Value2 |
+--------+--------+--------+
| 988    | 14     | YES    |
| 989    | 44     | NO     |
| 778    | 124    | NO     |
| 445    | 87     | YES    |
| 999    | 12     | YES    |
| 368    | 89     | NO     |
+--------+--------+--------+

+--------+--------+
| KeyNum | Value5 |
+--------+--------+
| 988    | 88     |
| 989    | 12     |
| 999    | 74     |
| 368    | 46     |
+--------+--------+

所以,我想要做的是将第二个表中的值连接到视图中的第一个,但是当我尝试时,我只能让它显示第二个表中记录的值。

【问题讨论】:

  • 听起来你需要外连接而不是内连接。

标签: sql sql-server


【解决方案1】:

在您的情况下,您需要使用左外连接而不是内连接 例如,当您要显示 table1 中的所有值以及 table2 中的任何匹配行时:

select a.*, b.value5 from table1 a
left outer join table2 b on a.keynum = b.keynum

【讨论】:

  • 创建视图时可以使用连接吗?
  • @LiveTangent 是的
  • 还有一个问题:如果“table b”有多个与“KeyNum”匹配的记录,有没有办法将它们添加到视图中的不同列,而不是使用“KeyNum”添加新行“?
  • @LiveTangent:不。是的,显然有很多方法可以实现这一点 - 但它们不是开箱即用的解决方案。如果您需要实现此功能,复杂性会显着增加。您提到的多条记录现象称为一对多关系。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-21
  • 1970-01-01
  • 2021-09-03
  • 1970-01-01
  • 2021-11-28
  • 1970-01-01
  • 2020-06-30
相关资源
最近更新 更多