Mysql
 sql >> Database >  >> RDS >> Mysql

Come posso selezionare * da una tabella in MySQL ma omettere determinate colonne?

Mentre molti affermano che è una buona pratica elencare esplicitamente ogni colonna che desideri venga restituita, ci sono situazioni in cui potresti voler risparmiare tempo e omettere determinate colonne dai risultati (ad esempio test). Di seguito ho fornito due opzioni che risolvono questo problema.

1. Crea una funzione che recupera tutti i nomi di colonna desiderati:(ho creato uno schema chiamato functions per contenere questa funzione)

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

Crea ed esegui l'istruzione select:

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

2. OPPURE senza scrivere una funzione potresti:

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;

*Sostituisci test con il tuo nome schema

**Sostituisci i dipendenti con il tuo nome di tabella

***Sostituisci age,dateOfHire con le colonne che desideri omettere (puoi lasciarlo vuoto per restituire tutte le colonne o semplicemente inserire il nome di una colonna da omettere)

** **Puoi regolare le lunghezze dei varchar nella funzione in base alle tue esigenze