You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为两张表的联合查询结果添加带自增序号的临时列

给两张表的联合查询结果添加自增行号

Got it,要给hair_product_table和mix_product_tables的联合查询结果加上自增行号的临时列,我给你两种适配不同MySQL版本的实现方案,按需选择就行~

方案一:适用于MySQL 8.0以下版本(用户变量实现)

如果你的MySQL版本低于8.0,没有窗口函数支持,可以用用户变量来生成自增行号:

SELECT 
    @row_num := @row_num + 1 AS row_number,
    combined.*
FROM (
    -- 联合两张表,选择你需要的字段(确保两边字段数量、类型一致)
    SELECT productname, description, pic 
    FROM hair_product_table
    UNION ALL
    SELECT productname, description, pic 
    FROM mix_product_tables
) AS combined,
(SELECT @row_num := 0) AS init_var;
  • 这里用UNION ALL而不是UNION,是因为UNION会自动去重并排序,可能导致行号不连续;如果确实需要去重,再换成UNION即可。
  • (SELECT @row_num := 0)用来初始化行号变量,每次查询一行就给变量加1,生成连续的自增行号。

方案二:适用于MySQL 8.0及以上版本(窗口函数实现)

MySQL 8.0及以上支持窗口函数,用ROW_NUMBER()会更简洁直观:

SELECT 
    ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS row_number,
    productname, description, pic
FROM (
    SELECT productname, description, pic 
    FROM hair_product_table
    UNION ALL
    SELECT productname, description, pic 
    FROM mix_product_tables
) AS combined;
  • ORDER BY (SELECT NULL)表示不对联合结果排序,行号按照查询返回的顺序生成;如果需要按某个字段排序(比如按productname),直接把(SELECT NULL)换成对应的字段即可,比如ORDER BY productname。

注意事项

如果两张表的字段不完全一致,要保证UNION ALL两边的字段数量、数据类型匹配:
比如如果mix_product_tables多了一个price字段,而hair_product_table没有,可以用NULL填充:

SELECT productname, description, pic, NULL AS price 
FROM hair_product_table
UNION ALL
SELECT productname, description, pic, price 
FROM mix_product_tables

内容的提问来源于stack exchange,提问作者timimi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:15:45