Ich habe die folgenden Datenbanktabellen.Wie wählt man 1: n bezogene Datensätze, die mindestens 2 pro Typ sind in 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
Mein gewünschtes Ergebnis ist wie folgt.
my_left_table
left_id name
3 C
Wie wähle ich die linke Seite Aufzeichnungen, die seine rechte Aufzeichnungen haben AT LEAST 2 status
new
ist UND 2 status
ist old
. Zum Beispiel ist left_id 1 nicht das Ziel, weil drei seiner rechten Datensätze den Status new haben, aber nur ein Datensatz den Status alt hat.
Bis jetzt habe ich.
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
Es gibt eine weitere Sache, die ich vergaß zu erwähnen. Der Status ist mehr als nur neu und alt, sondern dynamisch. Ich kann nicht sagen, was diese Statuswerte sind. Wie löst man das? –
Dann sollten Sie sich ansehen, was Samir in der anderen Antwort geschrieben hat, aber wenn Sie möchten, dass es vollständig dynamisch ist, müssten Sie die having-Klausel folgendermaßen ändern: HAVING SUM (status_calc) = (SELECT COUNT (DISTINCT (status)) FROM my_right_tabe); – user1898027