Quelle serait la meilleure façon de tester si deux champs sont identiques dans mysql? Actuellement, je fais ce qui suit, pour prendre en compte le cas NULL :
WHERE COALESCE(field1, '') = COALESCE(field2, '')
Ou existe-t-il une autre forme plus courte de vérification d'équivalence?
p>
3 Réponses :
field1 <=> field2;
dans MySQL
L'opérateur (vaisseau spatial).
Dans ANSI SQL
**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 |
ou si ci-dessus n'est pas pris en charge
CASE
WHEN
(<column> = <column>) OR (<column> IS NULL AND <column> IS NULL)
THEN 1
ELSE 0
END
Quelques requêtes et résultats de test
<column> IS NOT DISTINCT FROM <column>
voir démo entre le (MySQL) et le Méthode CASE END (ANSI SQL) .
L'opérateur
<=>auquel se réfèrent les réponses est une syntaxe spécifique à MySQL. Le SQL standard définit un prédicat appeléIS [NOT] DISTINCT FROM. Même objectif, juste plus de syntaxe de type SQL avec des mots anglais.