Выбрать все столбцы, кроме одного в MySQL?
Я пытаюсь использовать оператор select, чтобы 9X_mysql-query получить все столбцы из определенной таблицы 9X_mysqld MySQL, кроме одного. Есть ли простой способ 9X_mysqldump сделать это?
РЕДАКТИРОВАТЬ: в этой таблице 9X_wildcards 53 столбца (НЕ МОЙ ДИЗАЙН)
- 53 столбца? Я бы придерживался SELECT *, как предлагает Томас в этом случае ... если в этом дополнительном столбце нет огромного количества данных, котор ...
Ответ #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
Замена
- предостережение: запросы 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
- Выдал мне сообщение об ошибке на 3-м шаге: «Количество столбцов не соответствует количеству значен ...
Ответ #3
Ответ на вопрос: Выбрать все столбцы, кроме одного в MySQL?
Будет ли View работать лучше в этом случае?
CREATE VIEW vwTable as SELECT col1 , col2 , col3 , col.. , col53 FROM table
9X_mysqlsh
- ХАХА! Да, конечно. Теперь, как создать представление, которое будет включать все, НО один из столбцов. Я думаю, вы понимаете, как возникает исходный вопрос. ...
Ответ #4
Ответ на вопрос: Выбрать все столбцы, кроме одного в MySQL?
Вы можете сделать:
SELECT column1, column2, column4 FROM table WHERE whatever
без получения столбца3, хотя, возможно, вы 9X_mysql-if искали более общее решение?
- Большинство ответов с более высоким рейтингом в основном просто поиск способ ...
Ответ #5
Ответ на вопрос: Выбрать все столбцы, кроме одного в MySQL?
Если вы хотите исключить значение поля, например 9X_select для проблем безопасности / конфиденциальной 9X_mysqlsh информации вы можете получить этот столбец 9X_mysqldump как нулевой.
например
SELECT *, NULL AS salary FROM users
- Не работает. Возвращает два столбц ...
Ответ #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 (слишком?) трудным для чтения.
- 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;
Ответ #8
Ответ на вопрос: Выбрать все столбцы, кроме одного в MySQL?
Если в столбце, который вы не хотели выбирать, было 9X_wildcard большое количество данных, и вы не хотели 9X_wildcards включать его из-за проблем со скоростью, и 9X_mysqldump вы часто выбираете другие столбцы, я бы 9X_mysqld посоветовал вам создать новый таблицу с 9X_mysql-query одним полем, которое вы обычно не выбираете 9X_mysqldump с помощью ключа к исходной таблице, и удалите 9X_mysql поле из исходной таблицы. Присоединяйтесь 9X_mysqld к таблицам, когда это дополнительное поле 9X_mysql-if действительно необходимо.
Ответ #9
Ответ на вопрос: Выбрать все столбцы, кроме одного в MySQL?
Вы можете использовать DESCRIBE my_table и использовать результаты 9X_mysql-query этого для динамического создания оператора 9X_select SELECT.
Ответ #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 из метатаблицы.
- спасибо, мне нужно выбрать все столб ...
Ответ #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
Ответ #12
Ответ на вопрос: Выбрать все столбцы, кроме одного в MySQL?
Да, хотя это может быть много операций ввода-вывода 9X_mysql-if в зависимости от таблицы, я нашел обходной 9X_mysqldump путь для этого.
SELECT * INTO #temp FROM table ALTER TABLE #temp DROP COlUMN column_name SELECT * FROM #temp
Ответ #13
Ответ на вопрос: Выбрать все столбцы, кроме одного в MySQL?
Рекомендуется указывать запрашиваемые столбцы, даже 9X_mysql-table если запрашиваются все столбцы.
Поэтому я 9X_mysqlclient бы посоветовал вам написать название каждого 9X_mysqldump столбца в выписке (за исключением того, который 9X_mysqlsh вам не нужен).
SELECT col1 , col2 , col3 , col.. , col53 FROM table
- @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
Ответ #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 таблицу.
Ответ #16
Ответ на вопрос: Выбрать все столбцы, кроме одного в MySQL?
Сначала я думал, что вы можете использовать 9X_mysqlclient регулярные выражения, но, поскольку я читал 9X_mysql-table MYSQL docs, кажется, что вы не можете. На вашем месте 9X_wildcards я бы использовал другой язык (например, PHP) для 9X_mysql-server создания списка столбцов, которые вы хотите 9X_mysqlsh получить, сохранить его в виде строки, а 9X_mysql затем использовать для генерации SQL.
Ответ #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;
Ответ #18
Ответ на вопрос: Выбрать все столбцы, кроме одного в MySQL?
Я согласен с ответом @Mahomedalid, но я 9X_mysql-server не хотел делать что-то вроде подготовленного 9X_select оператора, и я не хотел вводить все поля, поэтому 9X_wildcards то, что у меня было, было глупым решением.
Заходим 9X_mysql-server в таблицу в phpmyadmin-> sql-> select, она 9X_wildcards выгружает запрос: копировать, заменять и 9X_my-sql готово! :)
Ответ #19
Ответ на вопрос: Выбрать все столбцы, кроме одного в MySQL?
Хотя я согласен с ответом Томаса (+1 ;)), я 9X_my-sql хотел бы добавить оговорку, что я предполагаю, что 9X_select столбец, который вам не нужен, почти не содержит 9X_my-sql данных. Если он содержит огромное количество 9X_mysqlsh текста, xml или двоичных объектов, найдите 9X_mysql-table время, чтобы выбрать каждый столбец по отдельности. В 9X_select-query противном случае пострадает ваша производительность. Ваше 9X_mysqldump здоровье!
Ответ #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,"; } }
- Я не согласен с тем, что 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 МБ)
Ответ #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");
Ответ #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'
Ответ #24
Ответ на вопрос: Выбрать все столбцы, кроме одного в MySQL?
Я использую эту работу, хотя она может быть 9X_select «не по теме» - с использованием инструментальных 9X_mysql-if средств mysql и построителя запросов -
- Откройте представление столбцов.
- Shift выберите все столбцы, которые вы хотите в своем запросе (в вашем случае все, кроме одного, что я делаю)
- Щелкните правой кнопкой мыши и выберите "Отправить в редактор SQL" -> краткое название.
- Теперь у вас есть список, и вы можете скопировать и вставить запрос куда угодно.
Ответ #25
Ответ на вопрос: Выбрать все столбцы, кроме одного в MySQL?
Если это всегда один и тот же столбец, вы 9X_select-query можете создать представление, в котором 9X_select его нет.
В противном случае нет, я так не 9X_my-sql думаю.
Ответ #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 запросах.
Ответ #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 -> Выбрать все инструкции.
Ответ #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';
-
5
-
2
-
2
-
3
-
3
-
1
-
3
-
16
-
4
-
13
-
13
-
11
-
9
-
4
-
3
-
3
-
5
-
3
-
5
-
13
-
5
-
13
-
3
-
6
-
4
-
2
-
11
-
2
-
4
-
7
-
4
-
5
-
3
-
1
-
5
-
5
-
4
-
3
-
5
-
7
-
3
-
15
-
4
-
1
-
1
-
8
-
5
-
10
-
5
-
2