2017-06-14 4 views
0

Tenir compte du tableau A avec le schéma ci-dessous,Comment utiliser le schéma de l'information pour obtenir le résultat de la table où select * n'est pas autorisé

id | ville | nom

1 | xyz | A

2 | pqr | B

Query est pas autorisé avec * comme SELECT * from table A

Mais il est bien si nous spécifions SELECT id,city,name from table A

Donc, pour résoudre ce que je ne suit,

SELECT GROUP_CONCAT(column_name SEPARATOR ',') FROM information_schema.columns where table_name='A' LIMIT 1; 

Résultat: id,city,name

Essayé quelque chose comme,

SELECT (
      SELECT GROUP_CONCAT(column_name SEPARATOR ',') FROM information_schema.columns where table_name='A' LIMIT 1 
      ) 
    FROM table A; 

Mais cela ne fonctionne pas, de toute autre façon je peux y parvenir? PS: les colonnes de table dans l'exemple ci-dessus sont moins mais il y a des tables avec plus de 25-30 colonnes alors, dans ce cas, il est difficile d'obtenir chaque nom de colonne d'un schéma et de l'ajouter manuellement.

+0

Demandez-vous des tables HTML ou des tables SQL? –

+0

'GROUP_CONCAT' ne peut pas être utilisé pour créer les colonnes' SELECT'! Cette fonction concatène les valeurs d'une colonne à une chaîne sur un groupe de lignes (créé par 'GROUP BY'). –

+0

Pourquoi n'êtes-vous pas autorisé à utiliser 'SELECT *'? – sjdaws

Répondre

1

Vous aurez besoin d'utiliser une instruction préparée et des variables pour que cela fonctionne.

Pour obtenir les colonnes que vous aurez besoin d'utiliser GROUP_CONCAT, cela sépare automatiquement par des virgules, en passant le deuxième paramètre comme une virgule provoquera vos champs séparés par deux virgules:

SELECT GROUP_CONCAT(COLUMN_NAME) FROM information_schema.COLUMNS 
    WHERE TABLE_SCHEMA = database() AND TABLE_NAME ='A'; 

--- id,city,name 

Vous pouvez utiliser SELECT ... INTO pour mettre cette requête dans une variable:

SELECT GROUP_CONCAT(COLUMN_NAME) FROM information_schema.COLUMNS 
    WHERE TABLE_SCHEMA = database() AND TABLE_NAME ='A' INTO @columns; 

les @columns variables vont maintenant tenir les noms de colonnes:

MariaDB [test]> SELECT @columns; 
+--------------+ 
| @columns  | 
+--------------+ 
| id,city,name | 
+--------------+ 

Une fois que vous avez les colonnes que vous aurez besoin de construire la requête

MariaDB [test]> SET @query = CONCAT('SELECT ', @columns, ' FROM A'); 

Vous pouvez vérifier la requête ressemble à droite en sélectionnant @query:

MariaDB [test]> SELECT @query; 
+----------------------------+ 
| @query      | 
+----------------------------+ 
| SELECT id,city,name FROM A | 
+----------------------------+ 

Une fois que vous êtes satisfait de la requête , préparez une instruction et exécutez-la:

MariaDB [test]> PREPARE stmt FROM @query; 
MariaDB [test]> EXECUTE stmt; 
+----+------+------+ 
| id | city | name | 
+----+------+------+ 
| 1 | xyz | A | 
| 2 | pqr | B | 
+----+------+------+ 
+0

J'ai déjà obtenu ce résultat comme vous le voyez dans ma question, résultat: id, city, name, Ce que je veux, c'est utiliser ce résultat dans une requête select comme mentionné ci-dessus. – dkb

+0

Bon, j'ai raté la vraie question, j'ai mis à jour ma réponse. – sjdaws

+0

parfait, merci! – dkb