2010-09-21 5 views
28

Comment puis-je sélectionner COUNT (*) s à partir de plusieurs tables dans MySQL?COUNT (*) à partir de plusieurs tables dans MySQL

Tels que:

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:

L'objectif est de revenir à ceci:

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

Quel est votre objectif? – Scott

+0

Besoin de plus de détails - pouvez-vous décrire en mots ce que vous essayez de faire? – egrunin

+0

essayez de changer la jointure interne à gauche rejoindre –

Répondre

65

Vous pouvez le faire en utilisant les sous-requêtes, une sous-requête pour chaque TableOccurrence:

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

Je veux compter 3 (compter) lignes de la première et une seule ligne de comptage de la 2ème. Comment je peux faire ça? – Adrian

+1

Je suis venu ici pour essayer de savoir comment faire la même chose dans une base de données Firebird. La syntaxe est légèrement différente: SELECT * FROM (SELECT COUNT (*) AS table1Count FROM table1), (SELECT COUNT (*) AS table2Count FROM table2), (SELECT COUNT (*) AS table3Count FROM table3) –

2

Vous pouvez utiliser UNION

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

Union donnera les résultats dans des lignes individuelles au lieu de colonnes. Le résultat que l'OP recherche est une seule ligne avec 3 colonnes de comptage –

10

Vous pouvez le faire avec les sous-requêtes, par exemple:

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

Essayez de changer:

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

ne sera pas travailler comme aucune relation entre les tables –

Questions connexes