Лучший способ проверить эквивалентность в двух полях sql - PullRequest
0 голосов
/ 15 февраля 2019

Каков наилучший способ проверки, если в mysql два поля одинаковы?В настоящее время я делаю следующее, чтобы реализовать дело NULL:

WHERE COALESCE(field1, '') = COALESCE(field2, '')

Или есть другая более короткая форма выполнения этой проверки эквивалентности?

Ответы [ 3 ]

0 голосов
/ 15 февраля 2019
WHERE COALESCE(field1, '') = COALESCE(field2, '')   

это не может проверить равенство, поскольку field1 может быть null, а field2 может быть пустой строкой ('').

вы можете использовать нулевой безопасный оператор

field1 <=> field2;
0 голосов
/ 15 февраля 2019

в MySQL

Оператор <=> (космический корабль).

В ANSI SQL

<column> IS NOT DISTINCT FROM <column> 

или, если указано выше, не поддерживается

CASE
 WHEN
    (<column> = <column>) OR (<column> IS NULL AND <column> IS NULL)
 THEN 1
 ELSE 0
END

Некоторые тестовые запросы и результаты

**Query #1**

    SELECT 1 <=> 1 MySQL, CASE WHEN (1 = 1) OR (1 IS NULL and 1 IS NULL) THEN 1 ELSE 0 END ANSI_SQL;

| MySQL | ANSI_SQL |
| ----- | -------- |
| 1     | 1        |

---
**Query #2**

    SELECT 0 <=> 0 MySQL, CASE WHEN (0 = 0) OR (0 IS NULL and 0 IS NULL) THEN 1 ELSE 0 END ANSI_SQL;

| MySQL | ANSI_SQL |
| ----- | -------- |
| 1     | 1        |

---
**Query #3**

    SELECT 1 <=> NULL MySQL, CASE WHEN (1 = NULL) OR (1 IS NULL and NULL IS NULL) THEN 1 ELSE 0 END ANSI_SQL;

| MySQL | ANSI_SQL |
| ----- | -------- |
| 0     | 0        |

---
**Query #4**

    SELECT NULL <=> NULL MySQL, CASE WHEN (NULL = NULL) OR (NULL IS NULL and NULL IS NULL) THEN 1 ELSE 0 END ANSI_SQL;

| MySQL | ANSI_SQL |
| ----- | -------- |
| 1     | 1        |

---
**Query #5**

    SELECT 0 <=> NULL MySQL, CASE WHEN (0 = NULL) OR (0 IS NULL and NULL IS NULL) THEN 1 ELSE 0 END ANSI_SQL;

| MySQL | ANSI_SQL |
| ----- | -------- |
| 0     | 0        |

см. демо между <=> (MySQL) и CASE END (ANSI SQL) методом.

0 голосов
/ 15 февраля 2019

Вы можете использовать <=>, нулевое безопасное сравнение:

where field1 <=> field2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...