sql >> Database >  >> RDS >> Mysql

Hoe kan ik * uit een tabel in MySQL selecteren, maar bepaalde kolommen weglaten?

Hoewel velen zeggen dat het de beste gewoonte is om elke kolom die u wilt retourneren expliciet te vermelden, zijn er situaties waarin u tijd wilt besparen en bepaalde kolommen uit de resultaten wilt weglaten (bijv. testen). Hieronder heb ik twee opties gegeven die dit probleem oplossen.

1. Maak een functie die alle gewenste kolomnamen ophaalt:(ik heb een schema gemaakt met de naam functies om deze functie vast te houden)

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

Select-statement maken en uitvoeren:

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

2. OF zonder een functie te schrijven zou je:

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;

*Vervang test door uw eigen schemanaam

**Vervang medewerkers door uw eigen tafelnaam

***Vervang age,dateOfHire door de kolommen die u wilt weglaten (u kunt deze leeg laten om alle kolommen terug te geven of voer één kolomnaam in om deze weg te laten)

** **U kunt de lengtes van de varchars in de functie aanpassen aan uw behoeften



  1. Hoe de RLIKE-operator werkt in MySQL

  2. Beste methode om een ​​lijst met gebruikers-ID's op te slaan

  3. Kolom automatisch verhogen - Volgorde als standaardwaarde in Oracle

  4. PHP-webtoepassing:vraag over best practices voor mysql-databaseontwerp