Pages: 1
- Sujet précédent - PostrgeSQL - valeur présente une fois dans plusieurs colonnes - Sujet suivant
#1 Mon 23 August 2021 14:45
- dhaulagiri
- Participant occasionnel
- Lieu: Nîmes, Gard
- Date d'inscription: 1 Dec 2006
- Messages: 46
- Site web
PostrgeSQL - valeur présente une fois dans plusieurs colonnes
Bonjour,
Je cherche à mettre en place une contrainte de vérification pour m'assurer que pour une ligne donnée, une valeur n'apparaisse qu'une seule fois dans un ensemble de colonnes. Est-ce que quelqu'un saurait faire ça?
Dans l'exemple ci-dessous, cela consiste à vérifier quand on saisit TOTO que cette valeur n'est pas présente dans les autres colonnes "rangsXX"
id rang01 rang02 rang03 rang04 ... rang35
1 TOTO TATA TUTU TETE TITI
Merci pour votre aide
Nicolas
Salutations, Nicolas.
Hors ligne
#2 Mon 23 August 2021 15:45
- tevrard
- Participant assidu
- Date d'inscription: 23 May 2016
- Messages: 320
Re: PostrgeSQL - valeur présente une fois dans plusieurs colonnes
En pivotant la table cela devient plus simple car tu peux mettre une clé sur le couple Id et valeur.
Si c'est bien un classement cela te permet aussi de faire des opérations de ranking avec des max etc...
Ca te donnerait une structure du type
Code:
id valeur rang 1 TOTO 01 1 TATA 02
Après ça doit être possible malgré tout de vérifier sans toucher ta table
Dernière modification par tevrard (Mon 23 August 2021 15:45)
Hors ligne
#3 Mon 23 August 2021 15:52
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1549
Re: PostrgeSQL - valeur présente une fois dans plusieurs colonnes
Bonjour,
Vous pouvez créer une check constraint sur la table et préciser dans la contrainte que les valeurs doivent etre uniques, par ex:
Code:
create table test ( id integer generated always as identity , val1 text, val2 text, val3 text, check (val1 <> val2 and val1 <> val3 and val2 <> val3) );
Nicolas
Hors ligne
#4 Mon 23 August 2021 16:48
- tevrard
- Participant assidu
- Date d'inscription: 23 May 2016
- Messages: 320
Re: PostrgeSQL - valeur présente une fois dans plusieurs colonnes
Bonjour,
Vous pouvez créer une check constraint sur la table et préciser dans la contrainte que les valeurs doivent etre uniques, par ex:Code:
create table test ( id integer generated always as identity , val1 text, val2 text, val3 text, check (val1 <> val2 and val1 <> val3 and val2 <> val3) );Nicolas
je connaissais pas le generated always as identity (jme traine une (très) vieille version de PG)
C'est mieux que le serial?
Sinon vu qu'il y a 35 colonnes à croiser la requête ne semble pas très commode à écrire
Hors ligne
#5 Mon 23 August 2021 17:48
- n314
- Participant assidu
- Date d'inscription: 6 Sep 2005
- Messages: 704
Re: PostrgeSQL - valeur présente une fois dans plusieurs colonnes
y'a peut être une modélisation plus efficace pour cela ? Non pas les val1...val35 en colonnes, mais en ligne, aka
une colonne id
une colonne clé, qui pourra contenir "valeur1"
une colonne valeur, qui contiendra la valeur pour "valeur1"
un index unique sur (id, valeur)
Hors ligne
#6 Wed 25 August 2021 08:07
- dhaulagiri
- Participant occasionnel
- Lieu: Nîmes, Gard
- Date d'inscription: 1 Dec 2006
- Messages: 46
- Site web
Re: PostrgeSQL - valeur présente une fois dans plusieurs colonnes
Bonjour,
Merci pour ces réponses!
Salutations, Nicolas.
Hors ligne
#7 Wed 25 August 2021 08:07
- dhaulagiri
- Participant occasionnel
- Lieu: Nîmes, Gard
- Date d'inscription: 1 Dec 2006
- Messages: 46
- Site web
Re: PostrgeSQL - valeur présente une fois dans plusieurs colonnes
Bonjour,
Merci pour ces réponses!
Salutations, Nicolas.
Hors ligne
#8 Wed 25 August 2021 08:07
- dhaulagiri
- Participant occasionnel
- Lieu: Nîmes, Gard
- Date d'inscription: 1 Dec 2006
- Messages: 46
- Site web
Re: PostrgeSQL - valeur présente une fois dans plusieurs colonnes
Bonjour,
Merci pour ces réponses!
Salutations, Nicolas.
Hors ligne
#9 Thu 26 August 2021 14:09
- dhaulagiri
- Participant occasionnel
- Lieu: Nîmes, Gard
- Date d'inscription: 1 Dec 2006
- Messages: 46
- Site web
Re: PostrgeSQL - valeur présente une fois dans plusieurs colonnes
Bonjour,
Merci pour ces réponses!
Salutations, Nicolas.
Hors ligne
Pages: 1
- Sujet précédent - PostrgeSQL - valeur présente une fois dans plusieurs colonnes - Sujet suivant