Bonjour,
je me prend la tête sur une requête, si un pro pouvait m'aider ?
J'ai une table de données :
rempli de :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 CREATE TABLE data ( data_id INTEGER, data_lang VARCHAR(2), data_value VARCHAR(255), CONSTRAINT data_pk PRIMARY KEY (data_id) );
et une table de liens :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 INSERT INTO data VALUES (1, 'fr', 'AFR'); INSERT INTO data VALUES (2, 'fr', 'BFR'); INSERT INTO data VALUES (3, 'fr', 'CFR'); INSERT INTO data VALUES (4, 'fr', 'DFR'); INSERT INTO data VALUES (5, 'en', 'AEN'); INSERT INTO data VALUES (6, 'en', 'BEN'); INSERT INTO data VALUES (7, 'en', 'CEN'); INSERT INTO data VALUES (8, 'en', 'DEN'); INSERT INTO data VALUES (9, 'us', 'AUS'); INSERT INTO data VALUES (10, 'us', 'BUS'); INSERT INTO data VALUES (11, 'us', 'CUS'); INSERT INTO data VALUES (12, 'us', 'DUS1'); INSERT INTO data VALUES (13, 'us', 'DUS2');
rempli de :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 CREATE TABLE tra ( tra_id INTEGER, tra_data1_id INTEGER, tra_data2_id INTEGER, CONSTRAINT tra_pk PRIMARY KEY (tra_id) );
Remarque : La relation étant symétrique, le champs (1, 1, 5) serait équivalent à un champs (1, 5, 1)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 INSERT INTO tra VALUES (1, 1, 5); INSERT INTO tra VALUES (2, 3, 11); INSERT INTO tra VALUES (3, 9, 1); INSERT INTO tra VALUES (3, 9, 5); INSERT INTO tra VALUES (4, 2, 6); INSERT INTO tra VALUES (5, 2, 10); INSERT INTO tra VALUES (6, 6, 10); INSERT INTO tra VALUES (7, 8, 12); INSERT INTO tra VALUES (8, 8, 4); INSERT INTO tra VALUES (9, 7, 3); INSERT INTO tra VALUES (10, 4, 12); INSERT INTO tra VALUES (11, 4, 13);
Je cherche à écrire une requete de sélection qui me fournit la donnée correspondant à une donnée (data_value) et un autre paramètre (data_lang) :
'AEN' lorsque je lui passe en paramètre data_value : 'AFR' et data_lang : 'en'
'AUS' lorsque je lui passe en paramètre data_value : 'AFR' et data_lang : 'us'
'AFR' lorsque je lui passe en paramètre data_value : 'AEN' et data_lang : 'fr'
'AUS' lorsque je lui passe en paramètre data_value : 'AEN' et data_lang : 'us'
Si la correspondance ne peut pas être faite à cause
- d'un critère non rempli (ex 1)
- de l'absence de lien de correspondance (ex 2)
je veut récupérer la donnée passée en paramètre (data_value)
'AFR' (le paramètre data_value) lorsque je lui passe en paramètre data_value : 'AFR' et data_lang : 'it' (ex 1 : 'it' n'est pas dans la colonne data_lang de la table data)
'CEN' (le paramètre data_value) lorsque je lui passe en paramètre data_value : 'CEN' et data_lang : 'us' (ex 2 : il n'y a pas de lien CEN/CUS dans la table tra )
Si la requête me retourne plusieurs valeurs, je n'en veut qu'une, la première par exemple :
'DUS1' lorsque je lui passe en paramètre data_value: 'DFR' et data_lang : 'us'
Enfin, dernière exigence : En SQL standard (ou MySQL sinon)
Je ne vous donne pas les essais que j'ai fait pour ne pas vous polluer l'esprit. Peut être qu'avec un regard neuf ?
Partager