# Vérification mathématique en SQL

**URL:** <https://www.debian-fr.org/t/verification-mathematique-en-sql/17457>\
**Category:** Programmation\
**Created:** [Février 20, 2016, 6:49 UTC](https://www.debian-fr.org/t/verification-mathematique-en-sql/17457 "2016-02-20T18:49:11Z")\
**Posts on this page:** 13\
**Page:** 1

<div class="post-metadata">

**Author:** ![Ashgenesis](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/57b2e6/32.png) [@Ashgenesis](https://www.debian-fr.org/u/Ashgenesis)\
**Post date:** [Février 20, 2016, 6:49 UTC](https://www.debian-fr.org/t/verification-mathematique-en-sql/17457/1 "2016-02-20T18:49:11Z")

</div>

Bonjour les jeunes.

Un petit problème qui devrait être intéressant à résoudre

Comment vérifier si dans ma table, j’ai N éléments contenant 2 bornes chacun  
que toutes les bornes se suivent 1 à 1.

Si j’ai N éléments je dois avoir une suite de valeurs de 1 à 2N.  
Et ceci en SQL 😉

en gros il faut que je valide une table comme ça

`id1 | id2 | champs
 1 | 3 | toto
 2 | 4 | toto2`

mais pas celle ci par exemple

`id1 | id2 | champs
 1 | 5 | toto
 2 | 8 | toto2`

---

<div class="post-metadata">

**Author:** ![thomas.leclerc](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/59ef9b/32.png) [@thomas.leclerc](https://www.debian-fr.org/u/thomas.leclerc)\
**Post date:** [Février 20, 2016, 6:49 UTC](https://www.debian-fr.org/t/verification-mathematique-en-sql/17457/2 "2016-02-20T18:49:13Z")

</div>

`id1 | id2 | champs
 1 | 5 | toto
 2 | 8 | toto2`

est ce que tu attendais un 6 à la place du 8 ou même le 5 n’est pas bon pour toi ?

---

<div class="post-metadata">

**Author:** ![Ashgenesis](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/57b2e6/32.png) [@Ashgenesis](https://www.debian-fr.org/u/Ashgenesis)\
**Post date:** [Février 20, 2016, 6:49 UTC](https://www.debian-fr.org/t/verification-mathematique-en-sql/17457/3 "2016-02-20T18:49:13Z")

</div>

Bonne question en fait le 5 et le 8 ne sont pas bons dans une structure telle que celle ci.

Il y a 2 éléments donc 4 bornes je dois donc avoir la suite 1,2,3,4

Si j’avais une structure avec 12 éléments je dois donc avoir la suite de 1 à 24

---

<div class="post-metadata">

**Author:** ![thomas.leclerc](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/59ef9b/32.png) [@thomas.leclerc](https://www.debian-fr.org/u/thomas.leclerc)\
**Post date:** [Février 20, 2016, 6:49 UTC](https://www.debian-fr.org/t/verification-mathematique-en-sql/17457/4 "2016-02-20T18:49:14Z")

</div>

> [@](#):
>
> Il y a 2 éléments donc 4 bornes je dois donc avoir la suite 1,2,3,4

donnes moi le tableau à trois éléments pour voir si je te suis

---

<div class="post-metadata">

**Author:** ![Ashgenesis](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/57b2e6/32.png) [@Ashgenesis](https://www.debian-fr.org/u/Ashgenesis)\
**Post date:** [Février 20, 2016, 6:49 UTC](https://www.debian-fr.org/t/verification-mathematique-en-sql/17457/5 "2016-02-20T18:49:14Z")

</div>

Un exemple de tableau à 3 elements

`id1 | id2 | champs
1 | 6 | toto
2 | 3 | toto1
4 | 5 | toto2`

Un exemple de tableau à 6 elements

`id1 | id2 | champs
1 | 12 | toto
2 | 5 | totoA
3 | 4 | totoB
6 | 11 | totoC
9 | 10 | totoD
7 | 8 | toto2`

---

<div class="post-metadata">

**Author:** ![fran.b](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/d78d45/32.png) [@fran.b](https://www.debian-fr.org/u/fran.b)\
**Post date:** [Février 20, 2016, 6:49 UTC](https://www.debian-fr.org/t/verification-mathematique-en-sql/17457/6 "2016-02-20T18:49:15Z")

</div>

Donc tous les éléments distincts, positifs et inférieurs à n. Tu peux faire ça: tu prends les éléments, tu les tries (coût en n.ln(n)) et vérifies qu’ils sont entre 1 et n.  
Avec SQL ça doit se faire facilement, tu assures le tri en construisant petit à petit une table avec un index (ce qui assurera l’unicité)

Sinon, tu fais un tableau de booléens et tu parcours tes tables en mettant à «true» le ième élément du tableau pour la lecture de i. Ça te donne une complexité en n au lieu de n.ln(n).

---

<div class="post-metadata">

**Author:** ![Ashgenesis](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/57b2e6/32.png) [@Ashgenesis](https://www.debian-fr.org/u/Ashgenesis)\
**Post date:** [Février 20, 2016, 6:49 UTC](https://www.debian-fr.org/t/verification-mathematique-en-sql/17457/7 "2016-02-20T18:49:15Z")

</div>

Donc tous les éléments distincts, positifs et inférieurs à n. Tout à fait mais il faut qu’ils soient aussi contigue.

---

<div class="post-metadata">

**Author:** ![thomas.leclerc](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/59ef9b/32.png) [@thomas.leclerc](https://www.debian-fr.org/u/thomas.leclerc)\
**Post date:** [Février 20, 2016, 6:49 UTC](https://www.debian-fr.org/t/verification-mathematique-en-sql/17457/8 "2016-02-20T18:49:20Z")

</div>

si tu fais un de toutes les valeurs de id1 toutes les valeurs de id2, ordre croissant

tu créé une table avec deux champs, un champ INT \<auto increment - primary key\>, et un champ INT pour y mettre tes valeurs

tu réinitialise la table en question, afin que le auto incrément recommence à la plus petite valeur issue de ton select (car je ne sais pas si ça sera toujours 1)

tu insère les valeurs de ton select dans la table en question, et surtout dans l’ordre.

normalement, sur chaque ligne, les deux colonnes doivent être identiques.

---

<div class="post-metadata">

**Author:** ![fran.b](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/d78d45/32.png) [@fran.b](https://www.debian-fr.org/u/fran.b)\
**Post date:** [Février 20, 2016, 6:49 UTC](https://www.debian-fr.org/t/verification-mathematique-en-sql/17457/9 "2016-02-20T18:49:20Z")

</div>

> [@](#):
>
> Donc tous les éléments distincts, positifs et inférieurs à n. Tout à fait mais il faut qu’ils soient aussi contigue.

Eh bien, tu as n lignes, tu fais un tablea de longueur 2N initialisé à false, puis pour toutes valeurs sur chaque ligne:

`Pour chaque i
   Si i<= 0 ou i > 2*n alors valeur hors cadre
   Si V.(i) alors 2 valeurs identiques
   Sinon V.(i)<-True
`  
Comme tu as entré 2n valeurs distinctes entre 1 et 2n, elles y sont toutes.

---

<div class="post-metadata">

**Author:** ![Ashgenesis](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/57b2e6/32.png) [@Ashgenesis](https://www.debian-fr.org/u/Ashgenesis)\
**Post date:** [Février 20, 2016, 6:49 UTC](https://www.debian-fr.org/t/verification-mathematique-en-sql/17457/10 "2016-02-20T18:49:23Z")

</div>

Ben en fait j’ai pas tout saisi à l’explication 😃 je suis sûr qu’elle est pertinente mais j’y comprend rien?

---

<div class="post-metadata">

**Author:** ![fran.b](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/d78d45/32.png) [@fran.b](https://www.debian-fr.org/u/fran.b)\
**Post date:** [Février 20, 2016, 6:49 UTC](https://www.debian-fr.org/t/verification-mathematique-en-sql/17457/11 "2016-02-20T18:49:31Z")

</div>

Essaye de prendre 10 entiers distincts compris entre 1 et 10 qui ne soient pas {1,2,3,4,5,6,7,8,9,10}… Tu ne peux pas, donc si ils sont 10, différents 2à2 et compris entre 1 et 10, ils sont 1,2,3,4,5,6,7,8,9,10

---

<div class="post-metadata">

**Author:** ![thomas.leclerc](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/59ef9b/32.png) [@thomas.leclerc](https://www.debian-fr.org/u/thomas.leclerc)\
**Post date:** [Février 20, 2016, 6:52 UTC](https://www.debian-fr.org/t/verification-mathematique-en-sql/17457/12 "2016-02-20T18:52:08Z")

</div>

Ashgenesis, des news la dessus ?

---

<div class="post-metadata">

**Author:** ![Ashgenesis](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/57b2e6/32.png) [@Ashgenesis](https://www.debian-fr.org/u/Ashgenesis)\
**Post date:** [Février 20, 2016, 6:52 UTC](https://www.debian-fr.org/t/verification-mathematique-en-sql/17457/13 "2016-02-20T18:52:36Z")

</div>

Pas encore eu le temps de me pencher sur le code SQL pour mettre en pratique les solutions évoquées. Mais c’est prévu 😉
