sql >> Databáze >  >> RDS >> Mysql

Jak mohu vybrat * z tabulky v MySQL, ale vynechat některé sloupce?

I když mnozí říkají, že je osvědčeným postupem výslovně uvést každý sloupec, který chcete vrátit, existují situace, kdy možná budete chtít ušetřit čas a některé sloupce z výsledků vynechat (např. testování). Níže jsem uvedl dvě možnosti, které tento problém řeší.

1. Vytvořit funkci který načte všechny požadované názvy sloupců:(Vytvořil jsem schéma nazvané funkce, které tuto funkci drží)

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

Vytvořte a spusťte příkaz select:

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

2. NEBO bez psaní funkce byste mohli:

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;

*Nahraďte test vlastním názvem schématu

**Nahraďte zaměstnance vlastním názvem tabulky

***Nahraďte age,dateOfHire sloupci, které chcete vynechat (můžete je nechat prázdné, chcete-li vrátit všechny sloupce, nebo stačí zadat název jednoho sloupce, který chcete vynechat)

** **Délky varcharů ve funkci můžete upravit tak, aby vyhovovaly vašim potřebám



  1. Vícevrstvé odpovědi na komentáře:Zobrazení a úložiště

  2. Zakažte všechna omezení tabulky v Oracle

  3. Charlotte SQL Server User Group:Oprava pomalých dotazů. Rychle.

  4. Jak získat záznam, pokud je počet v Laravelu nula