Выбрать все столбцы, кроме одного в MySQL?

Я пытаюсь использовать оператор select, чтобы 9X_mysql-query получить все столбцы из определенной таблицы 9X_mysqld MySQL, кроме одного. Есть ли простой способ 9X_mysqldump сделать это?

РЕДАКТИРОВАТЬ: в этой таблице 9X_wildcards 53 столбца (НЕ МОЙ ДИЗАЙН)

443
1

  • 53 столбца? Я бы придерживался SELECT *, как предлагает Томас в этом случае ... если в этом дополнительном столбце нет огромного количества данных, котор ...
28
Общее количество ответов: 28

Ответ #1

Ответ на вопрос: Выбрать все столбцы, кроме одного в MySQL?

На самом деле есть способ, для этого вам, конечно 9X_mysqlclient же, нужны разрешения ...

SET @sql = CONCAT('SELECT ', (SELECT REPLACE(GROUP_CONCAT(COLUMN_NAME), ',', '') FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '
' AND TABLE_SCHEMA = ''), ' FROM
'); PREPARE stmt1 FROM @sql; EXECUTE stmt1;

Замена

, and
243
6

  • предостережение: запросы INFORMATION_SCHEM ...

Ответ #2

Ответ на вопрос: Выбрать все столбцы, кроме одного в MySQL?

ВРЕМЕННАЯ ТАБЛИЦА

DROP TABLE IF EXISTS temp_tb; CREATE TEMPORARY TABLE ENGINE=MEMORY temp_tb SELECT * FROM orig_tb; ALTER TABLE temp_tb DROP col_a, DROP col_f,DROP col_z; #// MySQL SELECT * FROM temp_tb; 

Синтаксис DROP может отличаться 9X_my-sql для баз данных @Denis Rozhnev

68
4

  • Выдал мне сообщение об ошибке на 3-м шаге: «Количество столбцов не соответствует количеству значен ...

Ответ #3

Ответ на вопрос: Выбрать все столбцы, кроме одного в MySQL?

Будет ли View работать лучше в этом случае?

CREATE VIEW vwTable as SELECT col1 , col2 , col3 , col.. , col53 FROM table 

9X_mysqlsh

50
2

  • ХАХА! Да, конечно. Теперь, как создать представление, которое будет включать все, НО один из столбцов. Я думаю, вы понимаете, как возникает исходный вопрос. ...

Ответ #4

Ответ на вопрос: Выбрать все столбцы, кроме одного в MySQL?

Вы можете сделать:

SELECT column1, column2, column4 FROM table WHERE whatever 

без получения столбца3, хотя, возможно, вы 9X_mysql-if искали более общее решение?

35
5

  • Большинство ответов с более высоким рейтингом в основном просто поиск способ ...

Ответ #5

Ответ на вопрос: Выбрать все столбцы, кроме одного в MySQL?

Если вы хотите исключить значение поля, например 9X_select для проблем безопасности / конфиденциальной 9X_mysqlsh информации вы можете получить этот столбец 9X_mysqldump как нулевой.

например

SELECT *, NULL AS salary FROM users 

30
7

  • Не работает. Возвращает два столбц ...

Ответ #6

Ответ на вопрос: Выбрать все столбцы, кроме одного в MySQL?

Насколько мне известно, нет. Вы можете сделать 9X_mysql что-то вроде:

SELECT col1, col2, col3, col4 FROM tbl 

и вручную выберите нужные столбцы. Однако, если 9X_mysql-if вам нужно много столбцов, вы можете просто 9X_select сделать:

SELECT * FROM tbl 

и просто игнорируйте то, что вам 9X_select-query не нужно.

В вашем конкретном случае я бы 9X_mysql-server посоветовал:

SELECT * FROM tbl 

если вам не нужны только несколько 9X_mysql-table столбцов. Если вам нужны только четыре столбца, то:

SELECT col3, col6, col45, col 52 FROM tbl 

было 9X_select бы хорошо, но если вы хотите 50 столбцов, то 9X_mysql любой код, который делает запрос, станет 9X_select (слишком?) трудным для чтения.

27
1

  • Select * всегда плохой выбор. Не рекомендую. Прочтите, почему это антипаттерн SQl.<p><spa ...

Ответ #7

Ответ на вопрос: Выбрать все столбцы, кроме одного в MySQL?

Пробуя решения @Mahomedalid и @Junaid, я 9X_wildcard обнаружил проблему. Так что подумал о том, чтобы 9X_select-query поделиться им. Если в имени столбца есть 9X_mysql-table пробелы или дефисы, такие как отметка, запрос 9X_select-query завершится ошибкой. Простой обходной путь 9X_select - использовать обратную кавычку вокруг имен 9X_mysqld столбцов. Измененный запрос находится ниже

SET @SQL = CONCAT('SELECT ', (SELECT GROUP_CONCAT(CONCAT("`", COLUMN_NAME, "`")) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'users' AND COLUMN_NAME NOT IN ('id')), ' FROM users'); PREPARE stmt1 FROM @SQL; EXECUTE stmt1; 

19
0

Ответ #8

Ответ на вопрос: Выбрать все столбцы, кроме одного в MySQL?

Если в столбце, который вы не хотели выбирать, было 9X_wildcard большое количество данных, и вы не хотели 9X_wildcards включать его из-за проблем со скоростью, и 9X_mysqldump вы часто выбираете другие столбцы, я бы 9X_mysqld посоветовал вам создать новый таблицу с 9X_mysql-query одним полем, которое вы обычно не выбираете 9X_mysqldump с помощью ключа к исходной таблице, и удалите 9X_mysql поле из исходной таблицы. Присоединяйтесь 9X_mysqld к таблицам, когда это дополнительное поле 9X_mysql-if действительно необходимо.

11
0

Ответ #9

Ответ на вопрос: Выбрать все столбцы, кроме одного в MySQL?

Вы можете использовать DESCRIBE my_table и использовать результаты 9X_mysql-query этого для динамического создания оператора 9X_select SELECT.

9
0

Ответ #10

Ответ на вопрос: Выбрать все столбцы, кроме одного в MySQL?

Моя основная проблема - это большое количество 9X_mysql-query столбцов, которые я получаю при объединении 9X_mysqlclient таблиц. Хотя это не ответ на ваш вопрос 9X_mysql-query (как выбрать все столбцы, кроме определенных, из 9X_mysql-table одной таблицы), я думаю, стоит упомянуть, что 9X_mysqldump вы можете указать table. , чтобы получить все столбцы 9X_my-sql из конкретной таблицы, вместо того, чтобы 9X_mysql-table просто указывать .

Вот пример того, как это 9X_mysql-table может быть очень полезно:

select users.*, phone.meta_value as phone, zipcode.meta_value as zipcode

from users

left join user_meta as phone
on ( (users.user_id = phone.user_id) AND (phone.meta_key = 'phone') )

left join user_meta as zipcode
on ( (users.user_id = zipcode.user_id) AND (zipcode.meta_key = 'zipcode') )

Результатом являются 9X_select все столбцы из таблицы пользователей и два 9X_mysql-table дополнительных столбца, которые были объединены 9X_mysql-table из метатаблицы.

9
1

  • спасибо, мне нужно выбрать все столб ...

Ответ #11

Ответ на вопрос: Выбрать все столбцы, кроме одного в MySQL?

Мне понравился ответ от @Mahomedalid, помимо этого факта, сообщенного 9X_my-sql в комментарии от @Bill Karwin. Возможная проблема, поднятая 9X_mysqlsh @Jan Koritak, верна. Я столкнулся с этим, но я нашел 9X_mysqlclient уловку для этого и просто хочу поделиться 9X_mysql им здесь для всех, кто сталкивается с проблемой.

мы 9X_mysqld можем заменить функцию REPLACE предложением 9X_mysql-table where в подзапросе подготовленного оператора 9X_mysqlclient следующим образом:

Использование моей таблицы 9X_mysqlsh и имени столбца

SET @SQL = CONCAT('SELECT ', (SELECT GROUP_CONCAT(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'users' AND COLUMN_NAME NOT IN ('id')), ' FROM users'); PREPARE stmt1 FROM @SQL; EXECUTE stmt1; 

Итак, это исключает только 9X_mysql-query поле id, но не company_id

8
0

Ответ #12

Ответ на вопрос: Выбрать все столбцы, кроме одного в MySQL?

Да, хотя это может быть много операций ввода-вывода 9X_mysql-if в зависимости от таблицы, я нашел обходной 9X_mysqldump путь для этого.

SELECT * INTO #temp FROM table ALTER TABLE #temp DROP COlUMN column_name SELECT * FROM #temp 

7
0

Ответ #13

Ответ на вопрос: Выбрать все столбцы, кроме одного в MySQL?

Рекомендуется указывать запрашиваемые столбцы, даже 9X_mysql-table если запрашиваются все столбцы.

Поэтому я 9X_mysqlclient бы посоветовал вам написать название каждого 9X_mysqldump столбца в выписке (за исключением того, который 9X_mysqlsh вам не нужен).

SELECT col1 , col2 , col3 , col.. , col53 FROM table 

4
1

  • @kodecraft: это хорошая практика по той же причине, что и всегда возвращать один и тот же тип из функции (даже если вы работаете на языке, где это не применяется). По сути, это прин ...

Ответ #14

Ответ на вопрос: Выбрать все столбцы, кроме одного в MySQL?

Я согласен с "простым" решением перечислить 9X_my-sql все столбцы, но это может быть обременительным, а 9X_select опечатки могут привести к потере времени. Я 9X_wildcard использую функцию getTableColumns для получения 9X_my-sql имен моих столбцов, подходящих для вставки 9X_mysqld в запрос. Тогда все, что мне нужно сделать, это 9X_select удалить те, которые мне не нужны.

CREATE FUNCTION `getTableColumns`(tablename varchar(100)) RETURNS varchar(5000) CHARSET latin1 BEGIN DECLARE done INT DEFAULT 0; DECLARE res VARCHAR(5000) DEFAULT ""; DECLARE col VARCHAR(200); DECLARE cur1 CURSOR FOR select COLUMN_NAME from information_schema.columns where TABLE_NAME=@table AND TABLE_SCHEMA="yourdatabase" ORDER BY ORDINAL_POSITION; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; OPEN cur1; REPEAT FETCH cur1 INTO col; IF NOT done THEN set res = CONCAT(res,IF(LENGTH(res)>0,",",""),col); END IF; UNTIL done END REPEAT; CLOSE cur1; RETURN res; 

Ваш результат 9X_select возвращает строку с разделителями-запятыми, например 9X_mysqldump ...

col1, col2, col3, col4, ... col53

4
0

Ответ #15

Ответ на вопрос: Выбрать все столбцы, кроме одного в MySQL?

Я согласен с тем, что недостаточно Select *, если 9X_select тот, который вам не нужен, как упоминалось 9X_select-query в другом месте, является BLOB, вы не хотите, чтобы 9X_select-query эти накладные расходы ползли.

Я бы создал 9X_select-query представление с необходимыми данными, тогда вы можете 9X_mysqlsh Select * с комфортом -- если программное обеспечение 9X_wildcard базы данных их поддерживает. В противном 9X_select случае поместите огромные данные в другую 9X_mysql-if таблицу.

3
0

Ответ #16

Ответ на вопрос: Выбрать все столбцы, кроме одного в MySQL?

Сначала я думал, что вы можете использовать 9X_mysqlclient регулярные выражения, но, поскольку я читал 9X_mysql-table MYSQL docs, кажется, что вы не можете. На вашем месте 9X_wildcards я бы использовал другой язык (например, PHP) для 9X_mysql-server создания списка столбцов, которые вы хотите 9X_mysqlsh получить, сохранить его в виде строки, а 9X_mysql затем использовать для генерации SQL.

3
0

Ответ #17

Ответ на вопрос: Выбрать все столбцы, кроме одного в MySQL?

Основываясь на ответе @Mahomedalid, я сделал 9X_select-query некоторые улучшения для поддержки «выбора 9X_mysqld всех столбцов, кроме некоторых в mysql»

SET @database = 'database_name'; SET @tablename = 'table_name'; SET @cols2delete = 'col1,col2,col3'; SET @sql = CONCAT( 'SELECT ', ( SELECT GROUP_CONCAT( IF(FIND_IN_SET(COLUMN_NAME, @cols2delete), NULL, COLUMN_NAME ) ) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @tablename AND TABLE_SCHEMA = @database ), ' FROM ', @tablename); SELECT @sql; 

Если 9X_select у вас много столбцов, используйте этот sql 9X_mysqld для изменения group_concat_max_len

SET @@group_concat_max_len = 2048; 

3
0

Ответ #18

Ответ на вопрос: Выбрать все столбцы, кроме одного в MySQL?

Я согласен с ответом @Mahomedalid, но я 9X_mysql-server не хотел делать что-то вроде подготовленного 9X_select оператора, и я не хотел вводить все поля, поэтому 9X_wildcards то, что у меня было, было глупым решением.

Заходим 9X_mysql-server в таблицу в phpmyadmin-> sql-> select, она 9X_wildcards выгружает запрос: копировать, заменять и 9X_my-sql готово! :)

3
0

Ответ #19

Ответ на вопрос: Выбрать все столбцы, кроме одного в MySQL?

Хотя я согласен с ответом Томаса (+1 ;)), я 9X_my-sql хотел бы добавить оговорку, что я предполагаю, что 9X_select столбец, который вам не нужен, почти не содержит 9X_my-sql данных. Если он содержит огромное количество 9X_mysqlsh текста, xml или двоичных объектов, найдите 9X_mysql-table время, чтобы выбрать каждый столбец по отдельности. В 9X_select-query противном случае пострадает ваша производительность. Ваше 9X_mysqldump здоровье!

2
0

Ответ #20

Ответ на вопрос: Выбрать все столбцы, кроме одного в MySQL?

Просто сделай

SELECT * FROM table WHERE whatever 

Затем опустите столбец на своем 9X_my-sql любимом языке программирования: php

while (($data = mysql_fetch_array($result, MYSQL_ASSOC)) !== FALSE) { unset($data["id"]); foreach ($data as $k => $v) { echo"$v,"; } } 

2
5

  • Я не согласен с тем, что SELECT * - это своего рода антишаблон, который «никогда» не следует использовать в производственном коде. Гораздо яснее, что вы пол ...

Ответ #21

Ответ на вопрос: Выбрать все столбцы, кроме одного в MySQL?

Ответ, опубликованный Магомедалидом, содержит 9X_mysql-if небольшую проблему:

Код функции замены внутри 9X_mysql-table заменял "," на "", у этой замены возникает 9X_select-query проблема, если заменяемое поле является 9X_mysql-if последним в строке concat, поскольку последнее 9X_mysqld не имеет символа запятой ", "и не удаляется 9X_wildcards из строки.

Мое предложение:

SET @sql = CONCAT('SELECT ', (SELECT REPLACE(GROUP_CONCAT(COLUMN_NAME), '', '\'FIELD_REMOVED\'') FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '
' AND TABLE_SCHEMA = ''), ' FROM
');

Замена

, и `

Удаленный 9X_mysql столбец заменяется строкой «FIELD_REMOVED». В 9X_select-query моем случае это работает, потому что я пытался 9X_my-sql сохранить память. (Поле, которое я удалял, представляет 9X_select-query собой большой двоичный объект размером около 9X_mysql-server 1 МБ)

2
0

Ответ #22

Ответ на вопрос: Выбрать все столбцы, кроме одного в MySQL?

Я тоже хотел этого, поэтому вместо этого 9X_select-query создал функцию.

public function getColsExcept($table,$remove){ $res =mysql_query("SHOW COLUMNS FROM $table"); while($arr = mysql_fetch_assoc($res)){ $cols[] = $arr['Field']; } if(is_array($remove)){ $newCols = array_diff($cols,$remove); return "`".implode("`,`",$newCols)."`"; }else{ $length = count($cols); for($i=0;$i<$length;$i++){ if($cols[$i] == $remove) unset($cols[$i]); } return "`".implode("`,`",$cols)."`"; } } 

То, как это работает, заключается 9X_mysqlclient в том, что вы вводите таблицу, а затем столбец, который 9X_my-sql вам не нужен, или как в массиве: array ("id", "name", "anycolumn")

Итак, в 9X_mysql-if select вы можете использовать это так:

mysql_query("SELECT ".$db->getColsExcept('table',array('id','bigtextcolumn'))." FROM table"); 

или

mysql_query("SELECT ".$db->getColsExcept('table','bigtextcolumn')." FROM table"); 

2
0

Ответ #23

Ответ на вопрос: Выбрать все столбцы, кроме одного в MySQL?

Может быть, у меня есть решение для несоответствия, указанного 9X_mysqldump Яном Коритаком

SELECT CONCAT('SELECT ', ( SELECT GROUP_CONCAT(t.col) FROM ( SELECT CASE WHEN COLUMN_NAME = 'eid' THEN NULL ELSE COLUMN_NAME END AS col FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'employee' AND TABLE_SCHEMA = 'test' ) t WHERE t.col IS NOT NULL) , ' FROM employee' ); 

Таблица:

SELECT table_name,column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'employee' AND TABLE_SCHEMA = 'test' 

================================

table_name column_name employee eid employee name_eid employee sal 

================================

Результат запроса:

'SELECT name_eid,sal FROM employee' 

2
0

Ответ #24

Ответ на вопрос: Выбрать все столбцы, кроме одного в MySQL?

Я использую эту работу, хотя она может быть 9X_select «не по теме» - с использованием инструментальных 9X_mysql-if средств mysql и построителя запросов -

  1. Откройте представление столбцов.
  2. Shift выберите все столбцы, которые вы хотите в своем запросе (в вашем случае все, кроме одного, что я делаю)
  3. Щелкните правой кнопкой мыши и выберите "Отправить в редактор SQL" -> краткое название.
  4. Теперь у вас есть список, и вы можете скопировать и вставить запрос куда угодно.

9X_Выбрать все столбцы, кроме одного в MySQL?_select-query

2
0

Ответ #25

Ответ на вопрос: Выбрать все столбцы, кроме одного в MySQL?

Если это всегда один и тот же столбец, вы 9X_select-query можете создать представление, в котором 9X_select его нет.

В противном случае нет, я так не 9X_my-sql думаю.

1
0

Ответ #26

Ответ на вопрос: Выбрать все столбцы, кроме одного в MySQL?

Вы можете использовать SQL для генерации 9X_mysql-table SQL, если хотите, и оценить получаемый SQL. Это 9X_wildcard общее решение, поскольку оно извлекает имена 9X_mysql-server столбцов из информационной схемы. Вот пример 9X_my-sql из командной строки Unix.

Замена

  • MYSQL с вашей командой mysql
  • ТАБЛИЦА с названием таблицы
  • EXCLUDEDFIELD с именем исключенного поля
echo $(echo 'select concat("select ", group_concat(column_name) , " from TABLE") from information_schema.columns where table_name="TABLE" and column_name != "EXCLUDEDFIELD" group by "t"' | MYSQL | tail -n 1) | MYSQL 

Вам действительно 9X_mysql-table нужно будет извлечь имена столбцов таким 9X_mysqld способом только один раз, чтобы создать 9X_mysqldump список столбцов, исключая этот столбец, а 9X_select затем просто использовать созданный вами 9X_mysql-if запрос.

Примерно так:

column_list=$(echo 'select group_concat(column_name) from information_schema.columns where table_name="TABLE" and column_name != "EXCLUDEDFIELD" group by "t"' | MYSQL | tail -n 1) 

Теперь вы можете повторно 9X_mysqldump использовать строку $column_list в создаваемых вами 9X_wildcards запросах.

1
0

Ответ #27

Ответ на вопрос: Выбрать все столбцы, кроме одного в MySQL?

Я хотел бы добавить еще одну точку зрения, чтобы 9X_wildcard решить эту проблему, особенно если вам нужно 9X_mysqlsh удалить небольшое количество столбцов.

Вы 9X_my-sql можете использовать инструмент БД, такой 9X_select-query как MySQL Workbench, чтобы сгенерировать для вас оператор 9X_mysqld выбора, поэтому вам просто нужно вручную 9X_mysqlclient удалить эти столбцы для сгенерированного 9X_wildcards оператора и скопировать его в свой сценарий 9X_mysqldump SQL.

В MySQL Workbench способ его создания:

Щелкните 9X_mysql-query правой кнопкой мыши по таблице -> отправить 9X_mysqld в редактор Sql -> Выбрать все инструкции.

1
0

Ответ #28

Ответ на вопрос: Выбрать все столбцы, кроме одного в MySQL?

Принятый ответ имеет несколько недостатков.

  • Не работает там, где для имен таблиц или столбцов требуются обратные кавычки.
  • Ошибка, если столбец, который вы хотите пропустить, находится последним в списке.
  • Требуется дважды указать имя таблицы (один раз для выбора, а второй - для текста запроса), что является избыточным и ненужным.
  • Он потенциально может возвращать имена столбцов в неправильном порядке

Все 9X_mysql-if эти проблемы можно решить, просто включив 9X_mysql-table обратные кавычки в SEPARATOR для GROUP_CONCAT и используя условие 9X_wildcards WHERE вместо REPLACE(). Для моих целей (и я представляю 9X_select-query себе многие другие) я хотел, чтобы имена 9X_mysqldump столбцов возвращались в том же порядке, в 9X_mysql-if котором они появляются в самой таблице. Для 9X_wildcards этого мы используем явное предложение ORDER BY внутри 9X_wildcards функции GROUP_CONCAT():

SELECT CONCAT( 'SELECT `', GROUP_CONCAT(COLUMN_NAME ORDER BY `ORDINAL_POSITION` SEPARATOR '`,`'), '` FROM `', `TABLE_SCHEMA`, '`.`', TABLE_NAME, '`;' ) FROM INFORMATION_SCHEMA.COLUMNS WHERE `TABLE_SCHEMA` = 'my_database' AND `TABLE_NAME` = 'my_table' AND `COLUMN_NAME` != 'column_to_omit'; 

1
0