2010-09-21 13 views
28

Jak przejść do wyboru COUNT (*) s z wielu tabel w MySQL?COUNT (*) z wielu tabel w MySQL

Takich jak:

SELECT COUNT(*) AS table1Count FROM table1 WHERE someCondition 
JOIN?? 
SELECT COUNT(*) AS table2Count FROM table2 WHERE someCondition 
CROSS JOIN? subqueries? 
SELECT COUNT(*) AS table3Count FROM table3 WHERE someCondition 

Edit:

Celem jest powrót to:

+-------------+-------------+-------------+ 
| table1Count | table2Count | table3Count | 
+-------------+-------------+-------------+ 
| 14   | 27   | 0   | 
+-------------+-------------+-------------+ 
+0

Jaki jest Twój cel? – Scott

+0

Potrzebujesz więcej informacji - czy możesz opisać słowami, co chcesz zrobić? – egrunin

+0

spróbuj zmienić sprzężenie wewnętrzne na lewe złącze –

Odpowiedz

65

Można zrobić go za pomocą podzapytania, jeden podzapytania dla każdego tableCount:

SELECT 
    (SELECT COUNT(*) FROM table1 WHERE someCondition) as table1Count, 
    (SELECT COUNT(*) FROM table2 WHERE someCondition) as table2Count, 
    (SELECT COUNT(*) FROM table3 WHERE someCondition) as table3Count 
+0

Chcę policzyć 3 (zliczenia) wiersze z pierwszego i tylko jednego wiersza zliczania od drugiego. Jak mogę to zrobić? – Adrian

+1

Przyszedłem tutaj, próbując dowiedzieć się, jak to zrobić w bazie danych firebird. Składnia jest nieco inna: SELECT * FROM (WYBIERZ LICZBĘ (*) AS table1Count FROM table1), (WYBIERZ LICZBĘ (*) AS table2Count FROM table2), (WYBIERZ LICZBĘ (*) AS table3Count FROM table3) –

2

Można użyć UNION

SELECT COUNT(*) FROM table1 WHERE someCondition 
    UNION 
    SELECT COUNT(*) FROM table2 WHERE someCondition 
    UNION 
    SELECT COUNT(*) FROM table3 WHERE someCondition 
+3

Union wyświetli wyniki w poszczególnych wierszach zamiast w kolumnach. Zestaw wyników, którego szuka OP, to pojedynczy wiersz z trzema kolumnami zliczania. –

10

Można to zrobić za pomocą podzapytania, np:

select (SELECT COUNT(*) FROM table1 WHERE someCondition) as table1Count, 
     (SELECT COUNT(*) FROM table2 WHERE someCondition) as table2Count 
3

Spróbuj zmienić na:

SELECT 
    COUNT(table1.*) as t1, 
    COUNT(table2.*) as t2, 
    COUNT(table3.*) as t3 
FROM table1 
    LEFT JOIN tabel2 ON condition 
    LEFT JOIN tabel3 ON condition 
+0

nie będzie działa jako brak relacji między tabelami –