J'ai les tables de base de données suivantes.Comment sélectionner 1: n enregistrements liés qui sont minimum 2 par type en MySQL
my_left_table
left_id name
1 A
2 B
3 C
my_right_tabe
right_id thing left_id_fk status
1 D 1 new
2 E 1 new
3 F 2 old
4 G 3 old
5 H 3 new
6 I 3 new
7 J 1 old
8 K 2 old
9 L 2 new
10 M 3 old
11 N 3 old
12 O 1 new
Mon résultat souhaité est le suivant.
my_left_table
left_id name
3 C
Comment puis-je sélectionner les enregistrements gauche qui ses dossiers ont droit AT LEAST 2 status
est new
ET 2 status
est old
. Par exemple, left_id 1 n'est pas la cible car trois de ses enregistrements de droite ont le statut new mais un seul enregistrement a le statut old.
Jusqu'ici je l'ai.
SELECT *, COUNT(my_right_tabe.left_id_fk) AS count_left_id_fk
FROM my_left_table
INNER JOIN my_right_tabe
ON my_left_table.id = my_right_tabe.left_id_fk
GROUP BY my_right_tabe.left_id_fk
Il y a une chose que j'oublié de mentionner. Le statut est plus que nouveau et ancien, mais dynamique. Je ne peux pas dire quelles sont ces valeurs de statut. Comment résoudre cela? –
Ensuite, vous devriez regarder ce que Samir a écrit dans l'autre réponse, mais si vous voulez que ce soit totalement dynamique, vous devriez changer la clause having à: HAVING SUM (status_calc) = (SELECT COUNT (DISTINCT (statut)) FROM my_right_tabe) – user1898027