Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como posso selecionar * de uma tabela no MySQL, mas omitir certas colunas?


Embora muitos digam que é uma prática recomendada listar explicitamente todas as colunas que você deseja retornar, há situações em que você pode economizar tempo e omitir determinadas colunas dos resultados (por exemplo, testes). Abaixo, dei duas opções que resolvem esse problema.

1. Criar uma função que recupera todos os nomes de coluna desejados:(criei um esquema chamado functions para manter essa função)
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

Crie e execute a instrução select:
SET @sql = concat('SELECT ', (SELECT 
functions.getTableColumns('test', 'employees', 'age,dateOfHire')), ' FROM test.employees'); 
PREPARE stmt1 FROM @sql;
EXECUTE stmt1;

2. OU sem escrever uma função você poderia:
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;

*Substitua test pelo seu próprio nome de esquema

**Substitua os funcionários pelo seu próprio nome de tabela

*** Substitua age,dateOfHire pelas colunas que você deseja omitir (você pode deixar em branco para retornar todas as colunas ou apenas inserir um nome de coluna para omitir)

** **Você pode ajustar os comprimentos dos varchars na função para atender às suas necessidades