3
votes

Meilleur moyen de tester l'équivalence dans deux champs SQL

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>


1 commentaires

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.


3 Réponses :


5
votes

Vous pouvez utiliser , la comparaison sans aucune valeur nulle:

where field1 <=> field2


0 commentaires

2
votes
field1 <=> field2;

0 commentaires

2
votes

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) .


0 commentaires