Просмотр не допускает нулевого значения - PullRequest
0 голосов
/ 17 июня 2020

У меня есть представление, которое показывает данные нескольких разных объектов.

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, представление не заполняется данными, даже если идентификатор сам по себе не является обязательным. Когда я заполняю поля и добавляю идентификатор в t2id, данные отображаются правильно. Я пытался использовать функцию isnull в isnull(field7, null) as field7, но это ничего не меняет.

Итак, возможно ли иметь представление, отображающее нулевое значение, даже если само поле не допускает значения NULL, но ссылки является ? (Я также пробовал использовать поле, допускающее значение NULL, но это не сработало).

1 Ответ

1 голос
/ 17 июня 2020

Вы использовали предложение 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 Joins здесь: https://www.w3schools.com/sql/sql_join.asp

...