开发者

COUNT(*) from multiple tables in MySQL

开发者 https://www.devze.com 2023-01-16 20:42 出处:网络
How do I go about selecting COUNT(*)s from multiple tables in MySQL? Such as: SELECT COUNT(*) AS table1Count FROM table1 WHERE someCondition

How do I go about selecting COUNT(*)s from multiple tables in MySQL?

Such as:

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:

The goal is to return this:

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


You can do it by using subqueries, one subquery for each 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


You can do this with subqueries, e.g.:

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


Here is simple approach to get purely the row counts from multiple tables, if there are no conditions on specific tables.

Note:

For InnoDB this count is an approximation. However, for MyISAM the count is accurate.

Quoted from the docs:

The number of rows. Some storage engines, such as MyISAM, store the exact count. For other storage engines, such as InnoDB, this value is an approximation, and may vary from the actual value by as much as 40% to 50%. In such cases, use SELECT COUNT(*) to obtain an accurate count.

Using the information_schema.tables table you can use:

SELECT 
    table_name, 
    table_rows
FROM 
    information_schema.tables
WHERE
    table_name like 'my_table%';

Output:

table_name    table_rows
my_table_1    0
my_table_2    15
my_table_3    30


You can use UNION

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


You can do this in this way.

SELECT (select count(*) from table1) + (select count(*) from table2) as total_rows

You can add as many tables as you want.


Try changing to:

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


Not directly, but it works...

1.- Create a list of the tables you need to count rows.

2.- Put that list in the first column of a spreadsheet.

3.- In the second column, first row, use this formula:

="SELECT '"&A1&"', (SELECT count(*) FROM "&A1&") UNION"

4.- Fill down the formula.

5.- Copy the second column and paste it to do the query.

6.- Don't forget to remove the last UNION.

0

精彩评论

暂无评论...
验证码 换一张
取 消