J'ai une table de forme A | B | C où un tuple (a, b) dans (A, B) est la clé primaire. J'ai une liste de valeurs (BVAL) pour B et j'ai besoin des éléments dans la colonne A où une entrée de ligne pour chaque valeur du type (a, b ') pour b' dans BVAL existe.

Actuellement, j'ai implémenté un script qui récupère le premier tout (a, b '') pour le premier élément des BVAL, qui ensuite itère et affine la liste jusqu'au dernier élément des BVAL. Je pense que ce sera lent dans les grosses bases de données et je crois qu'une solution plus rapide existe. J'apprécierais toute aide.

Disons que nous avons le tableau suivant:

+---+---+
| A | B |
+---+---+
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 1 | 4 |
| 2 | 1 |
| 2 | 2 |
| 3 | 1 |
+---+---+

Si la liste BVAL se compose de (1,2), la requête doit renvoyer 1 et 2

0
Cherry Toska 2 sept. 2020 à 20:40

2 réponses

Meilleure réponse

Je comprends que vous voulez des a qui ont toutes les valeurs b. Si tel est le cas, vous pouvez utiliser group by et having:

select a
from mytable
where b in (1, 2)   -- either value
group by a
having count(*) = 2 -- both match 
2
GMB 2 sept. 2020 à 17:55

C'est ce que tu veux?

select distinct a
from t
where b in ( . .  . );  -- list of b values here
1
Gordon Linoff 2 sept. 2020 à 17:42