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

Hvordan kan jeg vælge * fra en tabel i MySQL, men udelade bestemte kolonner?

Mens mange siger, at det er den bedste praksis eksplicit at angive hver kolonne, du ønsker returneret, er der situationer, hvor du måske vil spare tid og udelade bestemte kolonner fra resultaterne (f.eks. test). Nedenfor har jeg givet to muligheder, der løser dette problem.

1. Opret en funktion der henter alle de ønskede kolonnenavne:(Jeg oprettede et skema kaldet funktioner til at holde denne funktion)

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

Opret og udfør select-sætning:

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

2. ELLER uden at skrive en funktion kan du:

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;

*Erstat testen med dit eget skemanavn

**Erstat medarbejdere med dit eget bordnavn

***Erstat age,dateOfHire med de kolonner, du vil udelade (du kan lade den stå tom for at returnere alle kolonner eller blot indtaste et kolonnenavn for at udelade)

** **Du kan justere længden af ​​varchars i funktionen for at imødekomme dine behov



  1. cURL og PHP viser 1

  2. MySQL datoformat DD/MM/ÅÅÅÅ vælge forespørgsel?

  3. Slutter med at lukke en åben SQL-forbindelse

  4. Hvorfor tager det så lang tid at omdøbe en kolonne i mysql?