Может ли оператор MySQL SELECT работать без указания имен столбцов? - PullRequest
1 голос
/ 19 сентября 2009

Как ВЫБРАТЬ строки и возвращать все столбцы вместо указания имен отдельных столбцов?

Могу ли я также вернуть только столбцы, которые соответствуют определенным критериям? (например, имена столбцов, начинающиеся с "_")

Ответы [ 4 ]

7 голосов
/ 19 сентября 2009

Вы можете выбрать все столбцы с помощью:

SELECT * FROM table_name

Вы не можете фильтровать имена столбцов в операторе SELECT, но вы можете фильтровать имена столбцов, поскольку они существуют в самой базе данных, с помощью SHOW COLUMNS:

SHOW COLUMNS FROM table_name LIKE "_%"

Который будет отображать столбцы, которые начинаются с '_'. Если у вас очень большая таблица с очень большим количеством столбцов, и вы должны построить оператор SELECT из этих полей, я бы предложил программно построить оператор, сначала отобразив столбцы с SHOW COLUMNS, а затем построив запрос SELECT из этого результата .

3 голосов
/ 19 сентября 2009

Все:

SELECT * FROM mytable

Сначала выберите нужные столбцы (начиная с столбца ...) из таблицы схемы базы данных:

SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS
  WHERE table_name = 'mytable' AND column_name LIKE 'col%'

затем выберите значения:

SELECT [found column names from previous query] FROM mytable
1 голос
/ 19 сентября 2009

Поскольку вы пытаетесь использовать имена полей, как если бы они были данными, очевидно, что ваш дизайн таблицы не подходит для того, что вы хотите сделать.

Вместо таблицы, в которой у вас есть данные в именах полей, например:

Id  English  Swedish  German
-------------------------------
1   Water    Vatten   Wasser
2   Car      Bil     Auto

Вам нужна таблица, в которой у вас есть данные в полях:

Id  Language  Word
-------------------
1   English   Water
1   Swedish   Vatten
1   German    Wasser
2   English   Car
2   Swedish   Bil
2   German    Auto

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

В нормализованной форме вы бы использовали две таблицы:

LanguageId  Language
---------------------
1           English
2           Swedish
3           German

Id  LanguageId  Word
------------------------
1   1           Water
1   2           Vatten
1   3           Wasser
2   1           Car
2   2           Bil
2   3           Auto
1 голос
/ 19 сентября 2009

SELECT * FROM TABLE_NAME выбирает все столбцы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...