внутреннее соединение на нулевом значении

Я не уверен, сделал ли я ошибку в логике.

Если бы у меня есть вопрос, и я делаю внутреннее соединение с нулевым значением, я всегда не получал бы результатов, или это будет игнорировать соединение и иметь успех? пример

user { id PK, name NVARCHAR NOT NULL, banStatus nullable reference }

если я напишу и u.banStatus, то я не получу рядов?

select * from user as u
join banstatus as b on u.banStatus=b.id
where id=1
21
задан 23 January 2010 в 11:41
поделиться

3 ответа

Когда вы делаете внутреннее соединение , NULL значения не совпадают ни с чем. Даже друг с другом. Вот почему ваш запрос не возвращает никаких рядов. ( источник )

8
ответ дан 29 November 2019 в 06:36
поделиться

Это внутренние соединения на нолках (Oracle Syntax):

select *
  from user
       uu
  join banstatus
       bb
    on uu.banstatus = bb.id
       or
       uu.banstatus is null and bb.id is null
4
ответ дан 29 November 2019 в 06:36
поделиться

Вы не получаете строку, если соединение является NULL, потому что NULL не может быть равно что-либо, даже NULL.

Если вы измените его в левое соединение, вы получите ряд.

С внутренним соединением:

select * from user as u
join banstatus as b on u.banStatus=b.id

1, '1', 1, 'Banned'

с левым соединением:

select * from user as u
left join banstatus as b on u.banStatus=b.id

1, '1', 1, 'Banned'
2, 'NULL', , ''

, используя эти тестовые данные:

CREATE TABLE user (id int, banstatus nvarchar(100));
INSERT INTO user (id, banstatus) VALUES
(1, '1'),
(2, 'NULL');

CREATE TABLE banstatus (id int, text nvarchar(100));
INSERT INTO banstatus (id, text) VALUES
(1, 'Banned');
49
ответ дан 29 November 2019 в 06:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: