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

Причины, почему селекторы на основе id не работают

  1. Элемент / DOM с указанным идентификатором еще не существует.
  2. Элемент существует, но он не является зарегистрированный в DOM [в случае, если HTML-узлы динамически добавляются из ответов Ajax].
  3. Присутствует более одного элемента с тем же идентификатором, который вызывает конфликт.

Решения

  1. Попробуйте получить доступ к элементу после его объявления или, альтернативно, использовать такие вещи, как $(document).ready();
  2. . Для элементов, исходящих из ответов Ajax, используйте метод .bind() для jQuery. В старых версиях jQuery для этого было .live().
  3. Используйте инструменты [например, плагин webdeveloper для браузеров], чтобы найти дубликаты идентификаторов и удалить их.
346
задан dreftymac 4 June 2019 в 13:26
поделиться

14 ответов

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

SET @sql = CONCAT('SELECT ', (SELECT REPLACE(GROUP_CONCAT(COLUMN_NAME), '<columns_to_omit>,', '') FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '<table>' AND TABLE_SCHEMA = '<database>'), ' FROM <table>');

PREPARE stmt1 FROM @sql;
EXECUTE stmt1;

Замена

, и

208
ответ дан 23 November 2019 в 00:30
поделиться

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

Иначе, нет я не думаю так.

1
ответ дан Gareth Simpson 23 November 2019 в 00:30
поделиться

В то время как я соглашаюсь с ответом Thomas (+1;)), я хотел бы добавить протест, что я приму столбец, который Вы не делаете , хотят, содержит едва любые данные. Если это содержит огромные суммы текста, xml или двоичных блобов, то не торопитесь для выбора каждого столбца индивидуально. Ваша производительность пострадает иначе. За Ваше здоровье!

2
ответ дан OJ. 23 November 2019 в 00:30
поделиться

Сначала я думал, что Вы могли использовать регулярные выражения, но поскольку я читал документы MySQL , кажется, что Вы не можете. На вашем месте я использовал бы другой язык (такой как PHP) для генерации списка столбцов, Вы хотите получить, сохранить его как строку и затем использовать это для генерации SQL.

3
ответ дан icco 23 November 2019 в 00:30
поделиться

Это - хорошая практика для определения столбцов, которые Вы запрашиваете, запрашиваете ли Вы все столбцы.

, Таким образом, я предложил бы, Вы написали имя каждого столбца в операторе (исключая тот, который Вы не хотите).

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

FROM table
4
ответ дан mbillard 23 November 2019 в 00:30
поделиться

Вы могли использовать , ОПИСЫВАЮТ my_table и используют результаты этого генерировать оператор SELECT динамично.

9
ответ дан jammycakes 23 November 2019 в 00:30
поделиться

Если бы столбец, который Вы не хотели выбирать, имел значительный объем данных в нем, и Вы не хотели включать его из-за проблем скорости, и Вы часто выбираете другие столбцы, я предложил бы, чтобы Вы составили новую таблицу с одним полем, которое Вы обычно не выбираете с ключом к исходной таблице и удаляете поле из исходной таблицы. Присоединитесь к таблицам, когда то дополнительное поле будет на самом деле требоваться.

11
ответ дан Stacey Richards 23 November 2019 в 00:30
поделиться

Я соглашаюсь, что не достаточно к Select *, если тот, в котором Вы не нуждаетесь, как упомянуто в другом месте, является BLOB, Вы не хотите иметь те издержки, закрадываются.

я создал бы представление с необходимыми данными, тогда Вы можете Select * в комфорте - если программное обеспечение базы данных поддерживает их. Еще, поместите огромные данные в другую таблицу.

3
ответ дан nlucaroni 23 November 2019 в 00:30
поделиться

Насколько я знаю, нет. Можно сделать что-то как:

SELECT col1, col2, col3, col4 FROM tbl

и вручную выбирают столбцы, которые Вы хотите. Однако, если Вы хотите много столбцов, тогда Вы могли бы просто хотеть сделать a:

SELECT * FROM tbl 

и просто игнорируют то, что Вы не хотите.

В Вашем особом случае, я предложил бы:

SELECT * FROM tbl

, если Вы только не хотите несколько столбцов. Если Вы только хотите четыре столбца, то:

SELECT col3, col6, col45, col 52 FROM tbl

был бы прекрасен, но если бы Вы хотите 50 столбцов, тогда какой-либо код, который делает запрос, стал бы (также?) трудный читать.

21
ответ дан Arion 23 November 2019 в 00:30
поделиться

Можно сделать:

SELECT column1, column2, column4 FROM table WHERE whatever

, не добираясь column3, хотя, возможно, Вы искали более общее решение?

35
ответ дан Mike Stone 23 November 2019 в 00:30
поделиться

Представление работало бы лучше в этом случае?

CREATE VIEW vwTable
as  
SELECT  
    col1  
    , col2  
    , col3  
    , col..  
    , col53  
FROM table
42
ответ дан Brian Childress 23 November 2019 в 00:30
поделиться

Вы можете использовать SQL для генерации SQL, если хотите, и оценить SQL, который он производит. Это общее решение, поскольку оно извлекает имена столбцов из информационной схемы. Вот пример из командной строки Unix.

Замена

  • MYSQL вашей командой mysql
  • TABLE с именем таблицы
  • 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

Вам действительно нужно будет извлечь имена столбцов таким образом только один раз, чтобы построить столбец list исключил этот столбец, а затем просто используйте созданный вами запрос.

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

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)

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

1
ответ дан 23 November 2019 в 00:30
поделиться

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

SELECT * FROM table WHERE whatever

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

while (($data = mysql_fetch_array($result, MYSQL_ASSOC)) !== FALSE) {
   unset($data["id"]);
   foreach ($data as $k => $v) { 
      echo"$v,";
   }      
}
4
ответ дан 23 November 2019 в 00:30
поделиться

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

SELECT *
INTO #temp
FROM table

ALTER TABLE #temp DROP COlUMN column_name

SELECT *
FROM #temp
3
ответ дан 23 November 2019 в 00:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: