Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MYSQL - CHỌN dữ liệu từ tên bảng động

Hãy thử:

mysql> SELECT VERSION();
+-----------+
| VERSION() |
+-----------+
| 5.7.11    |
+-----------+
1 row in set (0.00 sec)

mysql> DROP TABLE IF EXISTS `ifhcraw_2016_03_25_13`;
Query OK, 0 rows affected (0.00 sec)

mysql> DROP TABLE IF EXISTS `ifhcraw_2016_03_26_19`;
Query OK, 0 rows affected (0.00 sec)

mysql> DROP TABLE IF EXISTS `ifhcraw_2016_03_28_2`;
Query OK, 0 rows affected (0.00 sec)

mysql> CREATE TABLE `ifhcraw_2016_03_25_13` (
    ->   `id` INT
    -> );
Query OK, 0 rows affected (0.00 sec)

mysql> CREATE TABLE `ifhcraw_2016_03_26_19` (
    ->   `id` INT
    -> );
Query OK, 0 rows affected (0.00 sec)

mysql> CREATE TABLE `ifhcraw_2016_03_28_2` (
    ->   `id` INT
    -> );
Query OK, 0 rows affected (0.00 sec)

mysql> SET @`TABLE_NAME` := NULL;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT `TABLE_NAME` INTO @`TABLE_NAME`
    -> FROM `INFORMATION_SCHEMA`.`TABLES`
    -> WHERE `TABLE_NAME` LIKE 'ifhcraw%' AND
    ->       `UPDATE_TIME` = (SELECT MAX(`UPDATE_TIME`)
    ->                        FROM `INFORMATION_SCHEMA`.`TABLES`
    ->                        WHERE `TABLE_NAME` LIKE 'ifhcraw%'
    ->                       );
Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> SELECT @`TABLE_NAME`;
+---------------+
| @`TABLE_NAME` |
+---------------+
| NULL          |
+---------------+
1 row in set (0.00 sec)

mysql> SET @`qry` := IF(@`TABLE_NAME` IS NULL,
    ->                  'SELECT NULL',
    ->                  CONCAT('SELECT * FROM ', @`TABLE_NAME`));
Query OK, 0 rows affected (0.00 sec)

mysql> PREPARE `stmt` FROM @`qry`;
Query OK, 0 rows affected (0.00 sec)
Statement prepared

mysql> EXECUTE `stmt`;
+------+
| NULL |
+------+
| NULL |
+------+
1 row in set (0.00 sec)

mysql> DEALLOCATE PREPARE `stmt`;
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO `ifhcraw_2016_03_26_19`
    ->   (`id`)
    -> VALUES
    ->   (1);
Query OK, 1 row affected (0.00 sec)

mysql> SELECT `TABLE_NAME` INTO @`TABLE_NAME`
    -> FROM `INFORMATION_SCHEMA`.`TABLES`
    -> WHERE `TABLE_NAME` LIKE 'ifhcraw%' AND
    ->       `UPDATE_TIME` = (SELECT MAX(`UPDATE_TIME`)
    ->                        FROM `INFORMATION_SCHEMA`.`TABLES`
    ->                        WHERE `TABLE_NAME` LIKE 'ifhcraw%'
    ->                       );
Query OK, 1 row affected (0.00 sec)

mysql> SELECT @`TABLE_NAME`;
+-----------------------+
| @`TABLE_NAME`         |
+-----------------------+
| ifhcraw_2016_03_26_19 |
+-----------------------+
1 row in set (0.00 sec)

mysql> SET @`qry` := IF(@`TABLE_NAME` IS NULL,
    ->                  'SELECT NULL',
    ->                  CONCAT('SELECT * FROM ', @`TABLE_NAME`));
Query OK, 0 rows affected (0.00 sec)

mysql> PREPARE `stmt` FROM @`qry`;
Query OK, 0 rows affected (0.00 sec)
Statement prepared

mysql> EXECUTE `stmt`;
+------+
| id   |
+------+
|    1 |
+------+
1 row in set (0.00 sec)

mysql> DEALLOCATE PREPARE `stmt`;
Query OK, 0 rows affected (0.00 sec)

CẬP NHẬT

Cần cẩn thận khi có hai hoặc nhiều bảng phù hợp với tiêu chí, sẽ bị lỗi như sau:

mysql> INSERT INTO `ifhcraw_2016_03_26_19`
    ->   (`id`)
    -> VALUES
    ->   (1);
Query OK, 1 row affected (0,00 sec)

mysql> INSERT INTO `ifhcraw_2016_03_28_2`
    ->   (`id`)
    -> VALUES
    ->   (1);
Query OK, 1 row affected (0,00 sec)

mysql> SELECT `TABLE_NAME`
    -> FROM `INFORMATION_SCHEMA`.`TABLES`
    -> WHERE `TABLE_NAME` LIKE 'ifhcraw%' AND
    ->       `UPDATE_TIME` = (SELECT MAX(`UPDATE_TIME`)
    ->                        FROM `INFORMATION_SCHEMA`.`TABLES`
    ->                        WHERE `TABLE_NAME` LIKE 'ifhcraw%'
    ->                       );
+-----------------------+
| TABLE_NAME            |
+-----------------------+
| ifhcraw_2016_03_26_19 |
| ifhcraw_2016_03_28_2  |
+-----------------------+
2 rows in set (0,00 sec)

mysql> SELECT `TABLE_NAME` INTO @`TABLE_NAME`
    -> FROM `INFORMATION_SCHEMA`.`TABLES`
    -> WHERE `TABLE_NAME` LIKE 'ifhcraw%' AND
    ->       `UPDATE_TIME` = (SELECT MAX(`UPDATE_TIME`)
    ->                        FROM `INFORMATION_SCHEMA`.`TABLES`
    ->                        WHERE `TABLE_NAME` LIKE 'ifhcraw%'
    ->                       );
ERROR 1172 (42000): Result consisted of more than one row

Bạn nên xử lý trường hợp mà bạn cho là phù hợp.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Đồng bộ cơ sở dữ liệu Mysql giữa hai cơ sở dữ liệu

  2. Chèn giá trị vào cơ sở dữ liệu bằng câu lệnh đã soạn sẵn

  3. Làm thế nào để sao lưu / xuất tệp Cơ sở dữ liệu database.sql được kết nối trong laravel?

  4. Tôi có nên sử dụng PreparedStatements cho tất cả các chèn cơ sở dữ liệu của mình trong Java không?

  5. Tại sao kết nối với máy chủ MySQL quá chậm?