Mysql 将显示列的输出分组到逗号分隔的列表中

Mysql 将显示列的输出分组到逗号分隔的列表中,mysql,database-schema,Mysql,Database Schema,我将开发服务器上的数据库表与活动服务器上的数据库表进行比较,查找列名更改、新列和已删除的列。我想这样做: SELECT GROUP_CONCAT(Field) FROM (SHOW COLUMNS ON table_name) GROUP BY Field 'id', 'name', 'field1', 'field2' 我想要的是一个逗号分隔的列表,然后我可以将其带到live server并执行以下操作: SHOW COLUMNS FROM table_name WHERE NOT IN

我将开发服务器上的数据库表与活动服务器上的数据库表进行比较,查找列名更改、新列和已删除的列。我想这样做:

SELECT GROUP_CONCAT(Field) FROM (SHOW COLUMNS ON table_name) GROUP BY Field
'id', 'name', 'field1', 'field2'
我想要的是一个逗号分隔的列表,然后我可以将其带到live server并执行以下操作:

SHOW COLUMNS FROM table_name WHERE NOT IN ([comma-delimited list from above query])
有没有关于如何最好地做到这一点的想法——要么用我自己的方法纠正我,要么用其他方法一起纠正我?显然,上面的SQL不起作用

注意:服务器是完全独立的,可能无法相互通信,因此无法进行直接比较


编辑

谢谢你们的回答,伙计们!根据您对问题的回答,这是我获取列名的最后一个SQL:

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'
这给了我一个如下所示的列表:

SELECT GROUP_CONCAT(Field) FROM (SHOW COLUMNS ON table_name) GROUP BY Field
'id', 'name', 'field1', 'field2'
然后我可以使用此查询来比较:

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')

结果是第一个数据库中存在而第二个数据库中不存在的任何列的列表。太好了

查看information\u schema.columns表

select group_concat(column_name order by ordinal_position)
from information_schema.columns
where table_schema = 'database_name' and table_name = 'table_name'
编辑。信息架构允许您对元数据进行查询。 例如,您甚至可以比较具有左联接的表之间的字段

编辑。嗨,克里斯。很高兴你解决了。正如您所说的,您的问题非常不同,因为它涉及不同的服务器。我在同一台服务器上添加了两个不同数据库的示例

create database db1;
use db1;
create table table1(
id int not null auto_increment primary key,
name varchar(50),
surname varchar(50),
dob date)
engine = myisam;

create database db2;
create table db2.table2 like db1.table1;
alter table db2.table2 drop column dob;

select i1.column_name from (
select column_name
from information_schema.columns 
where table_schema = 'db1' and table_name = 'table1' ) as i1
left join (
select column_name
from information_schema.columns 
where table_schema = 'db2' and table_name = 'table2' ) as i2
on i1.column_name = i2.column_name
where i2.column_name is null
明显的结果是表1中的dob,而不是表2中的dob


希望它能帮助别人。问候男生。:)

您应该使用
信息\u模式


您可以将每个数据库中的
信息\u schema.columns
表复制到共享架构中,然后运行SQL查询来比较它们。

谢谢,Ike。尼克在你之前就在了,但是你的回答是+1,非常感谢!