将SHOW COLUMNS的组输出分组为逗号分隔列表

Chr*_*ker 20 mysql database-schema

我将开发服务器上的数据库表与实时服务器进行比较,查找列名称更改,新列和已删除的列.我想做这样的事情:

SELECT GROUP_CONCAT(Field) FROM (SHOW COLUMNS ON table_name) GROUP BY Field
Run Code Online (Sandbox Code Playgroud)

我所追求的是一个以逗号分隔的列表,然后我可以将其带到实时服务器并执行:

SHOW COLUMNS FROM table_name WHERE NOT IN ([comma-delimited list from above query])
Run Code Online (Sandbox Code Playgroud)

关于如何最好地做到这一点的任何想法 - 通过我自己的方法纠正我,或通过另一种方式一起完成?显然,上面的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'
Run Code Online (Sandbox Code Playgroud)

这给了我一个如下所示的列表:

'id', 'name', 'field1', 'field2'
Run Code Online (Sandbox Code Playgroud)

然后我可以使用此查询进行比较:

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')
Run Code Online (Sandbox Code Playgroud)

结果是第一个数据库中存在但不存在于第二个数据库中的任何列的列表.完善!

Nic*_*ssu 27

看一下information_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'
Run Code Online (Sandbox Code Playgroud)

编辑.信息架构允许您对元数据进行查询.因此,您甚至可以比较具有左连接的表之间的字段.

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

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
Run Code Online (Sandbox Code Playgroud)

显而易见的结果是table1中存在的dob而不是table2中的dob.

希望它能帮助别人.关心伙计们.:)