SQL как сравнить null = null

#sql

#sql

Вопрос:

Привет, у меня есть следующие две таблицы:

Таблица DEP:

 Deptarment_id       Dep_name
--------------------
1   Marketing
2   IT
3   Accouting
4   QA
null    Contract
5   BI
  

Таблица EMP:

 Deptarment_id       Dep_name
--------------------
1   Marketing
2   IT
3   Accounting
4   QA
null    Contract
5   BI
  

Если я выполню следующий запрос,

 SELECT * FROM CUS left join EMP on Deptarment_id = CUSTOMER_ID;
  

Я получу

 CUSTOMER_ID NAME    Deptarment_id   Dep_name
1   JOE 1   Marketing
3   Chris   3   Accounting
5   John    5   BI
null    Steve   null    null
null    Mary    null    null
99  test    null    null
  

Но я ищу что-то подобное. Я не могу вернуть значение ‘Contract’.

 CUSTOMER_ID NAME    Deptarment_id   Dep_name
1           JOE     1               Marketing
3           Chris   3               Accounting
5           John    5               BI
null        Steve   null            Contract
null        Mary    null            Contract
99          test    null            null
  

Комментарии:

1. Пометьте свой вопрос базой данных, которую вы используете.

2. кажется, вы пропустили таблицу … потому

Ответ №1:

То, что вы хотите сделать, на самом деле «неправильно использует» NULL значение в SQL. NULL не является конкретным значением; семантически это означает, что значение неизвестно (не отсутствует, но неизвестно). Следовательно, равенство не имеет смысла.

Теория хороша, но иногда мы хотим рассматривать NULL как законное значение. В этом случае будьте явными:

 SELECT *
FROM DEP left join
     EMP
     on (DEP.Department_id = EMP.Department_id) or
        (DEP.Department_id is null AND EMP.Department_id is null);
  

Я должен предупредить вас, что or в join состоянии часто является убийцей производительности. Некоторые базы данных предлагают NULL безопасные сравнения, но это зависит от конкретной базы данных. Существуют и другие методы, если производительность является проблемой.

Если производительность является проблемой, пожалуйста, задайте другой вопрос и включите:

  • Жизнеспособный образец данных
  • Запрос, который вы пытались
  • Результаты, которые вы хотите
  • Соображения по производительности (насколько велики таблицы)

В этом вопросе данные выборки не соответствуют запросу, поэтому я заполнил некоторые детали.

Комментарии:

1. Большое вам спасибо.