mysql select查询多个表名字符串

标签 mysql

我想在 mysql 中执行以下查询。我怎样才能在 mysql 中的单个选择查询中做到这一点?我想在表列表中运行相同的计数语句。内部查询返回动态表名字符串。

SELECT COUNT(*)  FROM ( list of table names from a select statemt)   Where Col1 is NULL;

SELECT COUNT(*) FROM ( SELECT CONCAT('TABLE',id) TABLENAMES FROM CUSTOMTABLE WHERE Active=1)  AA  WHERE AA.COL1 IS NULL;

谁能帮我解决这个问题?

最佳答案

你需要的是两件事的结合:

  1. 集合union运算符,和
  2. 返回涉及联合的中间操作结果的子查询。

假设您有一个account 表和一个employee 表。

mysql> desc account;
+--------------------+----------------------------------+------+-----+---------+----------------+
| Field              | Type                             | Null | Key | Default | Extra          |
+--------------------+----------------------------------+------+-----+---------+----------------+
| account_id         | int(10) unsigned                 | NO   | PRI | NULL    | auto_increment |
| product_cd         | varchar(10)                      | NO   | MUL | NULL    |                |
| cust_id            | int(10) unsigned                 | NO   | MUL | NULL    |                |
| open_date          | date                             | NO   |     | NULL    |                |
| close_date         | date                             | YES  |     | NULL    |                |
| last_activity_date | date                             | YES  |     | NULL    |                |
| status             | enum('ACTIVE','CLOSED','FROZEN') | YES  |     | NULL    |                |
| open_branch_id     | smallint(5) unsigned             | YES  | MUL | NULL    |                |
| open_emp_id        | smallint(5) unsigned             | YES  | MUL | NULL    |                |
| avail_balance      | float(10,2)                      | YES  |     | NULL    |                |
| pending_balance    | float(10,2)                      | YES  |     | NULL    |                |
+--------------------+----------------------------------+------+-----+---------+----------------+
11 rows in set (0.00 sec)

mysql> desc employee;
+--------------------+----------------------+------+-----+---------+----------------+
| Field              | Type                 | Null | Key | Default | Extra          |
+--------------------+----------------------+------+-----+---------+----------------+
| emp_id             | smallint(5) unsigned | NO   | PRI | NULL    | auto_increment |
| fname              | varchar(20)          | NO   |     | NULL    |                |
| lname              | varchar(20)          | NO   |     | NULL    |                |
| start_date         | date                 | NO   |     | NULL    |                |
| end_date           | date                 | YES  |     | NULL    |                |
| superior_emp_id    | smallint(5) unsigned | YES  | MUL | NULL    |                |
| dept_id            | smallint(5) unsigned | YES  | MUL | NULL    |                |
| title              | varchar(20)          | YES  |     | NULL    |                |
| assigned_branch_id | smallint(5) unsigned | YES  | MUL | NULL    |                |
+--------------------+----------------------+------+-----+---------+----------------+
9 rows in set (0.00 sec)

Now, you want to count the total number of rows in both the tables satisfying certain conditions. So, you use union first:

select account_id id from account union all select emp_id id from employee

This gives you a table that represents a union of these two tables account and employee and you make sure that they have the same 'data' that agrees with union operation. The above query is the simplest, it just selects emp_id from employee table and account_id from account table and renames the columns to id. This makes the data 'union-friendly'. Of course, you can apply your filter conditions here. The all operator selects all the records even if there are duplicates (Remember from set theory, a set contains all unique members).

Now, the first part, the subquery:

mysql> select count(*) from 
       (select account_id id from account union all 
        select emp_id id from employee) u;

然后返回:

+----------+
| count(*) |
+----------+
|       42 |
+----------+
1 row in set (0.00 sec)

并且可以验证:

mysql> select count(*) from employee;
+----------+
| count(*) |
+----------+
|       18 |
+----------+
1 row in set (0.00 sec)

mysql> select count(*) from account;
+----------+
| count(*) |
+----------+
|       24 |
+----------+
1 row in set (0.00 sec)

关于mysql select查询多个表名字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30293963/

相关文章:

mysql - 为什么这个查询不运行?

mysql - 按最近日期排序,然后是过去

mysql - 属性错误: 'int' object has no attribute 'taxonomy_features' error occurs when I tried to retrieve some data from the database

php - 使用 array_chunk 将记录导入数据库后,Laravel 返回重定向不起作用

java - 将选择查询的结果集插入另一个数据库

mysql - 将查询结果合并到一个逗号分隔的条目中

Python MySQLdb 错误

mysql - 停止 MySQL 服务窗口

mysql - 外键约束错误 - MySQL

PHP 在 POST 之前重新格式化日期