it-swarm-eu.dev

Seleziona i dati dalla query MySQL "mostra tabelle"

È possibile selezionare da show tables in MySQL?

SELECT * FROM (SHOW TABLES) AS `my_tables`

Qualcosa del genere, anche se quanto sopra non funziona (almeno su 5.0.51a).

52
BioTronic

Penso che tu voglia SELECT * FROM INFORMATION_SCHEMA.TABLES

Vedi http://dev.mysql.com/doc/refman/5.0/en/tables-table.html

42
Andrew

Non che io sappia, a meno che non selezioni da INFORMATION_SCHEMA, come altri hanno già detto.

Tuttavia, il comando SHOW è piuttosto flessibile, ad es .:

SHOW tables like '%s%'
20
Lucas Oman

Contare:

SELECT COUNT(*) as total FROM (SELECT TABLE_NAME as tab, TABLES.* FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='database_name' GROUP BY tab) tables;

Elencare:

SELECT TABLE_NAME as table, TABLES.* FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='database_name' GROUP BY table;
11
Ivan Ferrer

Potresti essere più vicino di quanto pensi - SHOW TABLES si comporta già in modo molto simile a SELECT:

$pdo = new PDO("mysql:Host=$Host;dbname=$dbname",$user,$pass);
foreach ($pdo->query("SHOW TABLES") as $row) {
    print "Table $row[Tables_in_$dbname]\n";
}
4
Bob Stein

Hai esaminato la query di INFORMATION_SCHEMA.Tables? Come in

SELECT ic.Table_Name,
    ic.Column_Name,
    ic.data_Type,
    IFNULL(Character_Maximum_Length,'') AS `Max`,
    ic.Numeric_precision as `Precision`,
    ic.numeric_scale as Scale,
    ic.Character_Maximum_Length as VarCharSize,
    ic.is_nullable as Nulls, 
    ic.ordinal_position as OrdinalPos, 
    ic.column_default as ColDefault, 
    ku.ordinal_position as PK,
    kcu.constraint_name,
    kcu.ordinal_position,
    tc.constraint_type
FROM INFORMATION_SCHEMA.COLUMNS ic
    left outer join INFORMATION_SCHEMA.key_column_usage ku
        on ku.table_name = ic.table_name
        and ku.column_name = ic.column_name
    left outer join information_schema.key_column_usage kcu
        on kcu.column_name = ic.column_name
        and kcu.table_name = ic.table_name
    left outer join information_schema.table_constraints tc
        on kcu.constraint_name = tc.constraint_name
order by ic.table_name, ic.ordinal_position;
4
BigJim

Non puoi inserire SHOW istruzioni in una sottoquery come nel tuo esempio. L'unica istruzione che può andare in una sottoquery è SELECT.

Come indicato da altre risposte, è possibile eseguire una query di INFORMATION_SCHEMA direttamente con SELECT e ottenere molta più flessibilità in questo modo.

Le istruzioni SHOW di MySQL sono internamente solo query rispetto alle tabelle INFORMATION_SCHEMA.

L'utente @physicalattraction ha pubblicato questo commento sulla maggior parte delle altre risposte:

Ciò fornisce (meta) informazioni sulle tabelle, non sul contenuto della tabella, come previsto dall'OP. - attrazione fisica

Al contrario, la domanda del PO non dice che vogliono selezionare i dati in tutte le tabelle. Dicono che vogliono selezionare dal risultato di SHOW TABLES, che è solo un elenco di nomi di tabelle.

Se l'OP desidera selezionare tutti i dati da tutte le tabelle, la risposta è no, non è possibile farlo con una query. Ogni query deve denominare le proprie tabelle in modo esplicito. Non è possibile rendere un nome di tabella una variabile o il risultato di un'altra parte della stessa query. Inoltre, tutte le righe di un determinato risultato della query devono avere le stesse colonne.

Quindi l'unico modo per selezionare tutti i dati da tutte le tabelle sarebbe eseguire SHOW TABLES e quindi per ogni tabella denominata in quel risultato, eseguire un'altra query.

4
Bill Karwin

È possibile creare una procedura memorizzata e posizionare i nomi delle tabelle in un cursore, quindi scorrere i nomi delle tabelle per mostrare i dati.

Introduzione alla procedura memorizzata: http://www.mysqltutorial.org/getting-started-with-mysql-stored-procedures.aspx

Creazione di un cursore: http://www.mysqltutorial.org/mysql-cursor/

Per esempio,

CREATE PROCEDURE `ShowFromTables`()
BEGIN

DECLARE v_finished INTEGER DEFAULT 0;
DECLARE c_table varchar(100) DEFAULT "";

DECLARE table_cursor CURSOR FOR 
SELECT table_name FROM information_schema.tables WHERE table_name like 'wp_1%';

DECLARE CONTINUE HANDLER 
    FOR NOT FOUND SET v_finished = 1;

OPEN table_cursor;

get_data: LOOP

FETCH table_cursor INTO c_table;

IF v_finished = 1 THEN 
LEAVE get_data;
END IF;

SET @s=CONCAT("SELECT * FROM ",c_table,";");

PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

END LOOP get_data;

CLOSE table_cursor;

END

Quindi chiamare la procedura memorizzata:

CALL ShowFromTables();
3
SELECT column_comment FROM information_schema.columns WHERE table_name = 'myTable' AND column_name = 'myColumnName'

Questo restituirà il commento su: myTable.myColumnName

3
Brian

Penso che ciò che vuoi siano le viste di information_schema di MySQL: http://dev.mysql.com/doc/refman/5.0/en/tables-table.html

3
Matt Rogish
SELECT * FROM INFORMATION_SCHEMA.TABLES

Questo dovrebbe essere un buon inizio. Per ulteriori informazioni, seleziona INFORMATION_SCHEMA Tables .

3
Sören Kuklau

in MySql 5.1 puoi provare

show tables like 'user%';

scita:

mysql> show tables like 'user%';

+----------------------------+

| Tables_in_test (user%) |

+----------------------------+

| user                       |

| user_password              |

+----------------------------+

2 rows in set (0.00 sec)
2
MT467

Sì, SELECT da table_schema potrebbe essere molto utile per l'amministrazione del sistema. Se hai molti server, database, tabelle ... a volte devi DROP o AGGIORNARE un gruppo di elementi. Ad esempio per creare una query per DROP tutte le tabelle con il prefisso "wp_old _...":

SELECT concat('DROP TABLE ', table_name, ';') FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema = '*name_of_your_database*'
AND table_name LIKE 'wp_old_%';
2
Srdjan

Non capisco perché vuoi usare SELECT * FROM come parte dell'istruzione.

12.5.5.30. MOSTRA TABELLE Sintassi

1
Derek B. Bell