sql >> Base de Datos >  >> RDS >> Mysql

MySQL comodín en select

Realmente no. Puede usar el * comodín de columna para seleccionar todas las columnas. Si está uniendo varias tablas, puede seleccionar todas las columnas de una tabla específica con el prefijo * con el nombre de la tabla o alias:

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

Sin embargo, no deberías usar * a menos que esté escribiendo un programa de administración de base de datos.

Alternativamente, puede crear una declaración dentro de SQL u otro idioma obteniendo los metadatos de la tabla para obtener los nombres de las columnas. Usando solo MySQL, puede consultar el COLUMNS tabla en el INFORMATION_SCHEMA base de datos para obtener los nombres de las columnas y usar GROUP_CONCAT para construir la lista de columnas para la declaración.

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

Reemplace ":db", ":table" y "..." con los valores apropiados. Incluso puede convertirlo en una declaración preparada para que pueda usarlo para cualquier tabla. A partir de ahí, PREPARE y EXECUTE la declaración construida.

Si no está limitado a SQL para programar, debería ser menos complicado. Es probable que el controlador de base de datos para el idioma de su elección ofrezca métodos para obtener metadatos. La implementación real sería similar al enfoque de SQL puro (obtener nombres de columnas, ensamblar declaraciones, preparar, ejecutar), pero no debería ser tan desagradable, ya que estaría usando un lenguaje algorítmico, en lugar de declarativo.

Estaría muy interesado en ver la situación en la que esto es realmente necesario.