在SQL Server中创建索引视图时可以使用内连接模拟左连接吗?我找到了使用
ISNULL(id,0)
的解决方案,但它对我不起作用。
我有
Table1 (ID PK, ID_U FK null)
并且我想离开加入 Table2 (ID_U PK, VALUE)
。我想查看 Table1
中的所有行以及 Table2
中的关联行(如果存在 ID_U)。
在创建的视图脚本中我有
select t1.ID, t1.ID_U, t2.VALUE
from Table1 t1
join Table2 t2 on t1.ID_U = t2.ID_U
or (ISNULL(t1.ID_U, 0) = 0 and ISNULL(t2.ID_U, 0) = 0)
where t1.ID_U is null -- only for test
/* create clustered index */
因此,我应该看到
Table1
中的所有行,其中 ID_U 为空,右表中为空,但我有 0 行。
我做错了什么?
我不建议您这样做。
你真的不应该这样做。
甚至不确定 SQL 是否允许您创建索引视图来执行此操作 - 希望不会。
但是,如果您绝对必须做出像 LEFT JOIN 这样的 INNER 行为,那么这是一种方法...
select
t1.ID,
t1.ID_U,
iif(t1.ID_U IS NULL, NULL, t2.Value) as Value -- return NULL when joined with the dummy record
from Table1 t1
join Table2 t2 on t1.ID_U = t2.ID_U
or ISNULL(t1.ID_U, 1) = t2.ID_U -- this joins the same row from t2 (with ID_U = 1) to every row in t1 that has a ID_U of NULL . NOTE: There must be a row in t2 with ID_U = 1