Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MYSQL - PILIH data dari nama tabel dinamis

Coba:

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)

PERBARUI

Harus hati-hati bila ada dua atau lebih tabel yang memenuhi kriteria, akan gagal sebagai berikut:

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

Anda harus menangani kasus ini jika Anda anggap tepat.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana saya bisa mengubah string menjadi float di mysql?

  2. Sesi tulis dimulai pada 1 halaman atau semua halaman?

  3. Jenis struktur apa yang saya gunakan untuk konten HTML (MySQL)

  4. Parsing CSV dan ekspor ke database Mysql di Grails

  5. Bagaimana menghubungkan Django ke database MySQL melalui koneksi SSL?