2017-09-18 6 views
0

Je peux exécuter les requêtes:Sélectionnez les noms de champs seulement de table sans information_schema

SELECT COLUMNS FROM _table-name_ ... ou ... SELECT COLUMNS FROM _table-name_

qui donnera le résultat exemple de: +-------+--------+------+-----+---------+ | Field | Type | Null | Key | Default | +-------+--------+------+-----+---------+ | id | char | no | pri | (NULL) | + + + + + + | name | char | no | | (NULL) | +-------+--------+------+-----+---------+

C'est OK mais je ne veux que la colonne Field. J'ai vu des solutions où vous pouvez interroger information_schema mais, malheureusement, je ne pas ont cette option pour moi, donc je suis à la recherche d'une solution le long des lignes de

SELECT Field FROM (SHOW COLUMNS FROM _table-name_) (mais je sais que ce n'est pas possible)

En outre, cela doit être possible dans une requête.

Répondre

1

La solution fournie par MySQL est d'utiliser information_schema. Vous devez expliquer pourquoi ce n'est pas une option pour vous, et ce que vous essayez d'atteindre, si quelqu'un peut proposer une alternative.

SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_SCHEMA='myschema' AND TABLE_NAME='mytable' 

Vous pouvez interroger les tables I_S à l'aide d'un tablename qualifié (comme je le montre ci-dessus), même si votre schéma par défaut est actuellement un autre schéma.

Vous avez toujours le privilège de lire I_S. Si vous avez des privilèges pour lire les tables dans votre schéma spécifié, vous pouvez lire les lignes de métadonnées correspondantes des tables I_S.

+0

Le problème étant que le backend cible un db spécifique dans un ancien code ancien que nous n'osons pas toucher. Je pourrais également le recâbler pour cibler les I_S, mais ce serait plus compliqué que ça en valait la peine et le code, plus que probablement, ne serait jamais réutilisé. Si la bonne façon de le faire est de cibler I_S alors je suppose que c'est ce que je vais devoir faire – wmash

+0

Par "cibles" voulez-vous dire que le code définit une base de données par défaut? Toute requête peut référencer des tables d'autres schémas (comme I_S), et peut même mélanger et assortir des tables de différents schémas dans la même requête. C'est à cela que servent les noms de tables qualifiés. Lire https://dev.mysql.com/doc/refman/5.7/en/identifier-qualifiers.html –

+0

Oui par "cibles" Je veux dire que le code définit une base de données par défaut. Par exemple, dis que mon db était * db_1 * et que je devais faire une requête dans le code, la requête serait juste comme: 'SELECT * FROM table_in_db_1' car je n'ai pas besoin de référencer la base de données. Donc, c'est comme une config mais une configuration que je préférerais ne pas altérer et, d'après ce que je viens de lire, je ne pense pas que les qualificatifs fonctionneraient dans ce cas – wmash