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)
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)
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>
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;
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.
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 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.