2016-08-22 5 views
-4

Ich habe diese zwei MySQL-TabellenCOUNT mehrere Datensätze aus verschiedenen Tabellen MYSQL

main_date_family

enter image description here

main_date_non_family

enter image description here

Ich möchte cou nt doppelte Datensätze aus zwei Tabellen wie diese

--------------------- 
| id_file | c | 
--------------------- 
| 1  | 3 | 
| 6  | 2 | 
| 14  | 5 | 
+0

Können Sie bitte Ihre erwartete Ausgabe doppelt überprüfen? Warum hat "2" in der erwarteten Ausgabe "4"? – 1000111

+0

'| 14 | 3 | 'Wird es erwartet? Sollte es nicht '| sein 14 | 5 | '? – 1000111

+0

Ja, Sie haben Recht, es muss 5 –

Antwort

2

Sie müssen UNION ALL verwenden, um den Ausgang zu erreichen:

SELECT 
t.id_file, 
COUNT(*) AS c 
FROM 
(
    SELECT id_file FROM main_date_family 

    UNION ALL 

    SELECT id_file FROM main_date_non_family 
) AS t 
GROUP BY t.id_file 

EDIT:

SELECT 
t.id, 
COUNT(t.id) AS c 
FROM 
(
    SELECT id_file AS id FROM main_date_family 

    UNION ALL 

    SELECT id_file FROM main_date_non_family 
) AS t 
WHERE t.id IN (SELECT A.id_file 
     FROM main_date_family A 
     INNER JOIN main_date_non_family B ON A.id_file = B.id_file 
) 
GROUP BY t.id 

die Idee erklären:

  1. Holen Sie sich alle gängigen id_file s.
  2. Jetzt kombinieren Sie alle id_file s aus diesen beiden Tabellen. Beachten Sie, dass diese Kombination alle id_file s aus diesen beiden Tabellen als enthält, obwohl es eine einzige Tabelle ist.
  3. Jetzt erhalten Sie nur die id_file s aus dem zweiten Schritt, die in der erste Schritt gefunden werden.
  4. Jetzt ist der einzige verbleibende Schritt der GROUP BY & COUNT. ich erraten wissen Sie genau, was group by ist
+0

Vielen Dank, aber ich brauche die Datensätze, die in den beiden Tabellen existieren, wenn ein Datensatz in der einen Tabelle existiert, aber nicht in der anderen, ich brauche es nicht. –

+0

Aber Ihre erste Anforderung hat dies nicht gesagt. Okay, ich nehme mir Zeit, um die Abfrage zu ändern. – 1000111

+0

Sehen Sie sich die Antwort im Bearbeitungsbereich an. – 1000111

Verwandte Themen