Prenons pour exemple ces deux tables
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 CREATE TABLE Main ( pk1 integer, pk2 bigint, n varchar, CONSTRAINT main_pk PRIMARY KEY (pk1,pk2) ); CREATE TABLE Arguments ( pk1 integer, pk2 bigint, k varchar, v varchar, CONSTRAINT arguments_pk PRIMARY KEY (pk1,pk2,k), CONSTRAINT arguments_fk FOREIGN KEY (pk1,pk2) REFERENCES Main(pk1,pk2) );
Je dois trouver toutes les lignes ayant différentes combinaisons clés/valeurs
Voyez-vous une méthode plus optimisée pour faire cela ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 SELECT pk1,pk2 FROM Main m WHERE n IN ('n1','n2') AND ( ( EXISTS ( SELECT 1 FROM Arguments a WHERE a.pk1=m.pk1 AND a.pk2=m.pk2 AND k='k1' AND v ~* 'v1' ) AND EXISTS ( SELECT 1 FROM Arguments a WHERE a.pk1=m.pk1 AND a.pk2=m.pk2 AND k='k2' AND v ~* 'v2' ) ) OR ( EXISTS ( SELECT 1 FROM Arguments a WHERE a.pk1=m.pk1 AND a.pk2=m.pk2 AND k='k3' AND v ~* 'v3' ) ) ) ;
Partager