Bonjour,
je me prend la tête sur une requête, si un pro pouvait m'aider ?

J'ai une table de données :
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)
);
rempli de :
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');
et une table de liens :
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)
);
rempli de :
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);
Remarque : La relation étant symétrique, le champs (1, 1, 5) serait équivalent à un champs (1, 5, 1)


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 ?