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

¿Cómo puedo seleccionar * de una tabla en MySQL pero omitir ciertas columnas?

Si bien muchos dicen que es una buena práctica enumerar explícitamente todas las columnas que desea que se devuelvan, hay situaciones en las que es posible que desee ahorrar tiempo y omitir ciertas columnas de los resultados (por ejemplo, pruebas). A continuación he dado dos opciones que resuelven este problema.

1. Crear una función que recupera todos los nombres de columna deseados:(creé un esquema llamado funciones para mantener esta función)

DELIMITER $$

CREATE DEFINER=`root`@`%` FUNCTION `getTableColumns`(_schemaName varchar(100), _tableName varchar(100), _omitColumns varchar(200)) RETURNS varchar(5000) CHARSET latin1
BEGIN
    SELECT GROUP_CONCAT(COLUMN_NAME) FROM information_schema.columns 
    WHERE table_schema = _schemaName AND table_name = _tableName AND FIND_IN_SET(COLUMN_NAME,_omitColumns) = 0 ORDER BY ORDINAL_POSITION;
END

Crear y ejecutar sentencia de selección:

SET @sql = concat('SELECT ', (SELECT 
functions.getTableColumns('test', 'employees', 'age,dateOfHire')), ' FROM test.employees'); 
PREPARE stmt1 FROM @sql;
EXECUTE stmt1;

2. O sin escribir una función podrías:

SET @sql = CONCAT('SELECT ', (SELECT GROUP_CONCAT(COLUMN_NAME) FROM 
information_schema.columns WHERE table_schema = 'test' AND table_name = 
'employees' AND column_name NOT IN ('age', 'dateOfHire')), 
' from test.eployees');  
PREPARE stmt1 FROM @sql;
EXECUTE stmt1;

*Reemplace la prueba con su propio nombre de esquema

**Reemplace a los empleados con su propio nombre de mesa

***Reemplace age,dateOfHire con las columnas que desea omitir (puede dejarlo en blanco para devolver todas las columnas o simplemente ingresar el nombre de una columna para omitir)

** **Puede ajustar las longitudes de los varchars en la función para satisfacer sus necesidades