408 votes

Sélectionnez toutes les colonnes à l'exception de l'un dans MySQL?

Je suis en train d'utiliser une instruction select pour obtenir toutes les colonnes à partir d'une certaine table MySQL sauf un. Est-il un moyen simple de faire cela?

EDIT: Il y a 53 colonnes de ce tableau (PAS de MA CONCEPTION)

236voto

Mahomedalid Points 1333

En fait, il ya une façon, vous devez disposer des autorisations de cours pour le faire ...

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;

Remplacement d' <table>, <database> and <columns_to_omit>

67voto

ghionoiu Points 119

Dans les définitions mysql (manuel) il n'y a pas une telle chose. Mais si vous avez un grand nombre de colonnes col1, ..., col100, les éléments suivants peuvent être utiles:

mysql> CREATE TEMPORARY TABLE temp_tb SELECT * FROM orig_tb;
mysql> ALTER TABLE temp_tb DROP col_x;
mysql> SELECT * FROM temp_tb;

47voto

Brian Childress Points 437

Serait une Vue de faire un meilleur travail dans ce cas?

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

29voto

Jan Koritak Points 446

Je voudrais commenter sur Mahomedalid de réponse.

Cette solution n'est généralement pas utilisable parce que si il y a une autre colonne d'avoir la colonne filtrée nom comme une sous-chaîne, cette partie est également filtrée et la requête génère une erreur.

Exemple:

mysql> show fields from products;
+-------------+---------------+------+-----+---------+----------------+
| Field       | Type          | Null | Key | Default | Extra          |
+-------------+---------------+------+-----+---------+----------------+
| id          | int(11)       | NO   | PRI | NULL    | auto_increment |
| category_id | int(11)       | YES  |     | NULL    |                |
| owner_id    | int(11)       | YES  |     | NULL    |                |
+-------------+---------------+------+-----+---------+----------------+
11 rows in set (0.00 sec)


mysql> SET @sql = CONCAT('SELECT ', (SELECT REPLACE(GROUP_CONCAT(COLUMN_NAME), 'id,', '') FROM  INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'products' AND TABLE_SCHEMA = 'doplacu'), ' FROM     products');
Query OK, 0 rows affected (0.00 sec)

mysql> select @sql;
+---------------------------------------------------------------------------------------------------------+
| @sql                                                                                                    |
+---------------------------------------------------------------------------------------------------------+
| SELECT category_owner_id FROM products |
+---------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

Observer la sous-chaîne id manquant de champ category_id.

25voto

Thomas Owens Points 45042

Au meilleur de ma connaissance, il n'y en a pas. Vous pouvez faire quelque chose comme:

SELECT col1, col2, col3, col4 FROM tbl

et choisir manuellement les colonnes que vous souhaitez. Toutefois, si vous voulez un grand nombre de colonnes, alors vous pourriez vouloir faire un:

SELECT * FROM tbl 

et ignorer ce que vous ne voulez pas.

Dans votre cas particulier, je vous suggère:

SELECT * FROM tbl

sauf si vous voulez seulement quelques colonnes. Si vous voulez seulement quatre colonnes, puis:

SELECT col3, col6, col45, col 52 FROM tbl

ce serait bien, mais si vous voulez 50 colonnes, puis tout le code qui effectue la requête serait devenu (trop?) difficile à lire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X