Mysql
 sql >> база данни >  >> RDS >> Mysql

Как мога да избера * от таблица в MySQL, но да пропусна определени колони?

Въпреки че мнозина казват, че е най-добрата практика да изброите изрично всяка колона, която искате да бъде върната, има ситуации, в които може да искате да спестите време и да пропуснете определени колони от резултатите (например тестване). По-долу съм дал две опции, които решават този проблем.

1. Създаване на функцията който извлича всички желани имена на колони:(създадох схема, наречена функции, за да задържи тази функция)

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

Създайте и изпълнете оператор за избор:

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

2. ИЛИ без да пишете функция, можете да:

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;

*Заменете теста със собствено име на схема

**Заменете служителите със собствено име на таблица

***Заменете age,dateOfHire с колоните, които искате да пропуснете (можете да оставите празно, за да върнете всички колони или просто въведете едно име на колона, за да пропуснете)

** **Можете да регулирате дължините на varchars във функцията, за да отговарят на вашите нужди



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Генериране на GUID в MySQL за съществуващи данни?

  2. MAKEDATE() Примери – MySQL

  3. По-добър начин да изберете всички колони от първата таблица и само една колона от втората таблица при вътрешно свързване

  4. Не виждам стойността на полето на MySQL BIT при използване на SELECT

  5. Mysqldump само таблици с определен префикс / Mysqldump заместващи символи?