Grouper la sortie de SHOW COLUMNS dans une liste délimitée par des virgules
Je suis en comparant les tables de base de données sur un serveur de développement, à l'encontre d'un serveur en direct, à la recherche pour le nom de la colonne des changements, de nouvelles colonnes, et qui ont été abandonnés. J'aimerais faire quelque chose comme ceci:
SELECT GROUP_CONCAT(Field) FROM (SHOW COLUMNS ON table_name) GROUP BY Field
Ce que je suis après est une liste séparée par des virgules, que je peux ensuite prendre au serveur et à faire:
SHOW COLUMNS FROM table_name WHERE NOT IN ([comma-delimited list from above query])
Des idées sur la meilleure façon de le faire - que ce soit par la correction de moi dans ma propre approche, ou par un autre moyen, tous ensemble? Évidemment, le SQL ci-dessus ne fonctionne pas.
Une remarque: Les serveurs sont complètement séparés et ne peuvent communiquer les uns avec les autres, donc pas de comparaison directe est possible.
MODIFIER
Merci pour les réponses, les gars! L'application de vos réponses à la question, c'est ma dernière SQL pour obtenir les noms des colonnes:
SELECT CONCAT("'", GROUP_CONCAT(column_name ORDER BY ordinal_position SEPARATOR "', '"), "'") AS columns
FROM information_schema.columns
WHERE table_schema = 'db_name' AND table_name = 'tbl_name'
Qui me donne une liste qui ressemble à ceci:
'id', 'name', 'field1', 'field2'
Alors je peux utiliser cette requête pour comparer:
SELECT GROUP_CONCAT(column_name ORDER BY ordinal_position)
FROM information_schema.columns
WHERE table_schema = 'db_name' AND table_name = 'tbl_name' AND column_name NOT IN ('id', 'name', 'field1', 'field2')
Les résultats sont d'une liste de toutes les colonnes qui existent dans la première base de données et non dans la seconde. Parfait!
source d'informationauteur Chris Baker
Vous devez vous connecter pour publier un commentaire.
Prendre un coup d'oeil à la information_schema.les colonnes de la table
modifier. Les informations de schéma vous permet de faire des requêtes sur les métadonnées.
Donc, vous pouvez même comparer les champs entre les tables avec un left join par exemple.
modifier. Salut Chris. Heureux que vous l'avez résolu. Comme vous avez dit que votre problème a été tout à fait différente, car elle concernée avec les différents serveurs. J'ajoute un exemple de deux bases de données différentes sur le même serveur.
et la suite logique est la date de naissance qui est présent dans le tableau 1 et pas dans table2.
Espère que cela aide quelqu'un d'autre. Ce qui concerne les gars. 🙂
Vous devez utiliser
INFORMATION_SCHEMA
.Vous pouvez copier le
information_schema.columns
table de chaque base de données dans un partagées schéma et exécuter des requêtes SQL afin de les comparer.