Выбрать все столбцы, кроме одного в 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 ');
PREPARE stmt1 FROM @sql;
EXECUTE stmt1;
Замена , and
243
V
VADOLF
- предостережение: запросы 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
N
Neemesiss
- Выдал мне сообщение об ошибке на 3-м шаге: «Количество столбцов не соответствует количеству значен ...
Ответ #3
Ответ на вопрос: Выбрать все столбцы, кроме одного в MySQL?
Будет ли View работать лучше в этом случае?
CREATE VIEW vwTable
as
SELECT
col1
, col2
, col3
, col..
, col53
FROM table
9X_mysqlsh
50
U
Uzamasy
- ХАХА! Да, конечно. Теперь, как создать представление, которое будет включать все, НО один из столбцов. Я думаю, вы понимаете, как возникает исходный вопрос. ...
Ответ #4
Ответ на вопрос: Выбрать все столбцы, кроме одного в MySQL?
Вы можете сделать:
SELECT column1, column2, column4 FROM table WHERE whatever
без получения столбца3, хотя, возможно, вы 9X_mysql-if искали более общее решение?
35
R
RoyalBack
- Большинство ответов с более высоким рейтингом в основном просто поиск способ ...
Ответ #5
Ответ на вопрос: Выбрать все столбцы, кроме одного в MySQL?
Если вы хотите исключить значение поля, например 9X_select для проблем безопасности / конфиденциальной 9X_mysqlsh информации вы можете получить этот столбец 9X_mysqldump как нулевой.
например
SELECT *, NULL AS salary FROM users
30
s
spyingon
- Не работает. Возвращает два столбц ...
Ответ #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
F
Faradeich
- 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
Z
Zalipala
Ответ #8
Ответ на вопрос: Выбрать все столбцы, кроме одного в MySQL?
Если в столбце, который вы не хотели выбирать, было 9X_wildcard большое количество данных, и вы не хотели 9X_wildcards включать его из-за проблем со скоростью, и 9X_mysqldump вы часто выбираете другие столбцы, я бы 9X_mysqld посоветовал вам создать новый таблицу с 9X_mysql-query одним полем, которое вы обычно не выбираете 9X_mysqldump с помощью ключа к исходной таблице, и удалите 9X_mysql поле из исходной таблицы. Присоединяйтесь 9X_mysqld к таблицам, когда это дополнительное поле 9X_mysql-if действительно необходимо.
11
s
sametskiy
Ответ #9
Ответ на вопрос: Выбрать все столбцы, кроме одного в MySQL?
Вы можете использовать DESCRIBE my_table и использовать результаты 9X_mysql-query этого для динамического создания оператора 9X_select SELECT.
9
x
xageroN
Ответ #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
D
DemaStone
- спасибо, мне нужно выбрать все столб ...
Ответ #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
E
Elessario
Ответ #12
Ответ на вопрос: Выбрать все столбцы, кроме одного в MySQL?
Да, хотя это может быть много операций ввода-вывода 9X_mysql-if в зависимости от таблицы, я нашел обходной 9X_mysqldump путь для этого.
SELECT *
INTO #temp
FROM table
ALTER TABLE #temp DROP COlUMN column_name
SELECT *
FROM #temp
7
Y
Yashkin
Ответ #13
Ответ на вопрос: Выбрать все столбцы, кроме одного в MySQL?
Рекомендуется указывать запрашиваемые столбцы, даже 9X_mysql-table если запрашиваются все столбцы.
Поэтому я 9X_mysqlclient бы посоветовал вам написать название каждого 9X_mysqldump столбца в выписке (за исключением того, который 9X_mysqlsh вам не нужен).
SELECT
col1
, col2
, col3
, col..
, col53
FROM table
4
Y
Yurasumy
- @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
P
Pocelujka
Ответ #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
n
ninaGorshko
Ответ #16
Ответ на вопрос: Выбрать все столбцы, кроме одного в MySQL?
Сначала я думал, что вы можете использовать 9X_mysqlclient регулярные выражения, но, поскольку я читал 9X_mysql-table MYSQL docs, кажется, что вы не можете. На вашем месте 9X_wildcards я бы использовал другой язык (например, PHP) для 9X_mysql-server создания списка столбцов, которые вы хотите 9X_mysqlsh получить, сохранить его в виде строки, а 9X_mysql затем использовать для генерации SQL.
3
Q
Queyonci
Ответ #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
H
Hailujun
Ответ #18
Ответ на вопрос: Выбрать все столбцы, кроме одного в MySQL?
Я согласен с ответом @Mahomedalid, но я 9X_mysql-server не хотел делать что-то вроде подготовленного 9X_select оператора, и я не хотел вводить все поля, поэтому 9X_wildcards то, что у меня было, было глупым решением.
Заходим 9X_mysql-server в таблицу в phpmyadmin-> sql-> select, она 9X_wildcards выгружает запрос: копировать, заменять и 9X_my-sql готово! :)
3
G
GalaTerror
Ответ #19
Ответ на вопрос: Выбрать все столбцы, кроме одного в MySQL?
Хотя я согласен с ответом Томаса (+1 ;)), я 9X_my-sql хотел бы добавить оговорку, что я предполагаю, что 9X_select столбец, который вам не нужен, почти не содержит 9X_my-sql данных. Если он содержит огромное количество 9X_mysqlsh текста, xml или двоичных объектов, найдите 9X_mysql-table время, чтобы выбрать каждый столбец по отдельности. В 9X_select-query противном случае пострадает ваша производительность. Ваше 9X_mysqldump здоровье!
2
U
Uncontrollad
Ответ #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
X
Xredko
- Я не согласен с тем, что 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
T
Tatsuran
Ответ #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
S
StOpLeX
Ответ #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
F
Falgone
Ответ #24
Ответ на вопрос: Выбрать все столбцы, кроме одного в MySQL?
Я использую эту работу, хотя она может быть 9X_select «не по теме» - с использованием инструментальных 9X_mysql-if средств mysql и построителя запросов -
- Откройте представление столбцов.
- Shift выберите все столбцы, которые вы хотите в своем запросе (в вашем случае все, кроме одного, что я делаю)
- Щелкните правой кнопкой мыши и выберите "Отправить в редактор SQL" -> краткое название.
- Теперь у вас есть список, и вы можете скопировать и вставить запрос куда угодно.
2
R
Runecliff
Ответ #25
Ответ на вопрос: Выбрать все столбцы, кроме одного в MySQL?
Если это всегда один и тот же столбец, вы 9X_select-query можете создать представление, в котором 9X_select его нет.
В противном случае нет, я так не 9X_my-sql думаю.
1
Y
Ysialolmwp
Ответ #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
a
aSadashkin
Ответ #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
L
Lyavolpe
Ответ #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
N
NOfearMix
-
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