视图不允许空值

View doesn't allow null value

我有一个显示多个不同对象数据的视图。

CREATE VIEW viewA AS
    SELECT
        fiel1, field2, field3, -- table 1
        field4, field5, field6, -- table 2
        field7, field8 -- table 3
    FROM table1 t1
       JOIN table2 t2 ON t1.t2id = t2.id
       JOIN table3 t3 ON t1.t3id = t3.id
GO

我的表格如下:

CREATE TABLE table1 (
   id      int not null IDENTITY(1, 1),
   field1  int not null IDENTITY(1, 1),
   field2  int not null,
   field3  int not null,
   t2id    int, -- foreign key, is nullable
   t3id    int  -- foreign key, is nullable
);

CREATE TABLE table2 (
   id      int not null IDENTITY(1, 1),
   field4  int not null,
   field5 int not null,
   field6 varchar not null
);

CREATE TABLE table3 (
   id      int not null IDENTITY(1, 1),
   field7  int not null,
   field8 varchar not null
);

当我用一些数据填充 table1 而 t2id 中没有任何数据时,视图没有填充数据,即使 id 本身不是必需的。当我完成字段并在 t2id 中添加一些 id 时,数据会正确显示。我尝试在 isnull(field7, null) as field7 中使用 isnull 函数,但这并没有改变任何东西。

那么,是否可以有一个显示空值的视图,即使字段本身不可为空但引用可以为空? (我也尝试使用可为空的字段,但没有用)。

您使用了 JOIN 子句。改为使用 LEFT JOIN

CREATE VIEW viewA AS
    SELECT
        fiel1, field2, field3, -- table 1
        field4, field5, field6, -- table 2
        field7, field8 -- table 3
    FROM table1 t1
       LEFT JOIN table2 t2 ON t1.t2id = t2.id
       LEFT JOIN table3 t3 ON t1.t3id = t3.id
GO

了解更多关于 SQL 加入这里:https://www.w3schools.com/sql/sql_join.asp