如题,一般的查询过程中,都是需要什么字段查什么字段,差一点的就直接用 * 将所有列的数据都包含进去。

近日,有一功能,将总店的部分商品数据 copy 一份到分店中。因为商品数据存放在一起,所以需要将表中的旧数据重新导入,并修改分店的 id。通过构造 sql ,查询出来的数据是符合要求的,但同时也把旧数据的 主键 id 携带了进来。插入数据时如果记录含有主键,会插入失败,主键重复。只有想办法去除掉主键。

网上找到如下 SQL(验证有效):

SELECT
    CONCAT(
        ' select ',
        GROUP_CONCAT(COLUMN_NAME),
        ' from ',
        TABLE_NAME,
        ' ;'
    )
FROM
    information_schema. COLUMNS
WHERE
    table_name = 'xxxx'
AND TABLE_SCHEMA = 'ccms_xxx'
AND COLUMN_NAME != 'ID';

其中,table_name 为查询的表名,TABLE_SCHEMA 为查询表所在的数据库,COLUMN_NAME != 'ID' 则排除字段名为 ID 的列。