Mysql
 sql >> Base de données >  >> RDS >> Mysql

Caractère générique MySQL dans select

Pas vraiment. Vous pouvez utiliser le * caractère générique de colonne pour sélectionner toutes les colonnes. Si vous rejoignez plusieurs tables, vous pouvez sélectionner toutes les colonnes d'une table spécifique en préfixant * avec le nom ou l'alias de la table :

SELECT a.id, a.title, b.*
  FROM articles AS a
    JOIN blurbs AS b ON a.id = b.article

Cependant, vous ne devriez pas utiliser * sauf si vous écrivez un programme d'administration de base de données.

Vous pouvez également créer une instruction dans SQL ou dans un autre langage en récupérant les métadonnées de table pour obtenir les noms de colonne. En utilisant uniquement MySQL, vous pouvez interroger les COLUMNS table dans le INFORMATION_SCHEMA base de données pour obtenir les noms de colonne et utiliser GROUP_CONCAT pour créer la liste des colonnes de l'instruction.

SELECT CONCAT(
      'SELECT ',
      GROUP_CONCAT(COLUMN_NAME SEPARATOR ', '),
      ' FROM ', :db, '.', :table,
      ' WHERE ...'
      )
  FROM INFORMATION_SCHEMA.COLUMNS
  WHERE TABLE_SCHEMA=:db AND TABLE_NAME=:table

Remplacez ":db", ":table" et "..." par les valeurs appropriées. Vous pouvez même le transformer en une instruction préparée afin de pouvoir l'utiliser pour n'importe quelle table. À partir de là, PREPARE et EXECUTE l'instruction construite.

Si vous n'êtes pas limité à SQL pour la programmation, cela devrait être moins salissant. Le pilote de base de données pour la langue de votre choix propose probablement des méthodes pour obtenir des métadonnées. L'implémentation réelle serait similaire à l'approche SQL pure (obtenir les noms de colonne, assembler l'instruction, préparer, exécuter), mais ne devrait pas être si laide, car vous utiliseriez un langage algorithmique plutôt que déclaratif.

Je serais très intéressé de voir la situation dans laquelle cela est réellement nécessaire..