我将开发服务器上的数据库表与实时服务器进行比较,查找列名更改,新列和删除的列。我想要做这样的事情:将SHOW COLUMNS的输出分组为逗号分隔列表
SELECT GROUP_CONCAT(Field) FROM (SHOW COLUMNS ON table_name) GROUP BY Field
我所追求的是一个逗号分隔的列表,我可以再取到实时服务器,并做到:
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'
这让我看起来像这样的列表:
'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')
结果是第一个数据库中存在的任何列的列表,而不是第二个数据库中的列。完善!
谢谢,艾克。尼克在你之前,但为你的答案+1,非常感谢! – 2011-03-03 21:24:17