为两张表的联合查询结果添加带自增序号的临时列
给两张表的联合查询结果添加自增行号
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
相关产品推荐
相关产品推荐

