选择语句MySQL 8中的自动递增临时列



你好,我用这种类型的句子在我准备的语句中返回一个自动递增列,选择

cnt := cnt + 1
SET @query = CONCAT('SELECT * FROM (SELECT (@cnt := @cnt + 1) AS id, a.idProducto idProducto, a.idExProducto idExterno, trim(a.descripcion) nombreProducto, trim(a.descripcionAlt) nombreLargoProducto, trim(a.serial) serial,',    
' a.peso, a.volumen, a.IdTpoGrupo, trim(b.descripcion) nombreGrupo,',
' a.idTpoLinea, trim(c.descripcion) nombreLinea,',                          
' a.idTpoMarca, trim(d.descripcion) nombreMarca,', 
' a.idTpoUnidad, trim(e.descripcion) nombreTipoUnidad,', 
' CASE WHEN a._estado = 1 THEN ''true'' ELSE ''false'' END estado, ',  
' g.nombreArchivo imagen ',  
' FROM tblProducto a',          
' INNER JOIN tblProducto_TpoGrupo b ON a.IdTpoGrupo = b.IdTpoGrupo',
' INNER JOIN tblProducto_TpoLinea c ON a.idTpoLinea = c.idTpoLinea',
' INNER JOIN tblProducto_TpoMarca d ON a.idTpoMarca = d.idTpoMarca',
' INNER JOIN tblTpoUnidadMedida e ON a.idTpoUnidad = e.idTpoUnidadMed ',
' LEFT JOIN tblProductoXImagen f ON a.idProducto = f.idProducto  AND f._estado=1',
' LEFT JOIN tblImagen g on f.idImagen = g.idImagen AND g._estado=1',
' WHERE a._estado<2 ',whereLike,whereConcat, ' order by idProducto ) allrecords');             



PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

它在MySQL 5上运行得很好,但现在在MySQL 8中被弃用,我的事务返回了一个警告,但该警告停止了我的存储过程的执行,我想知道是否有解决方案可以在MySQL 8上实现这种行为。

谢谢你的帮助。

您可以使用窗口函数。你想要的逻辑是:

row_number() over(order by idProducto) as id

这将为您提供一个递增的整数值,该整数值从1开始,并根据idProducto递增。如果结果集中的两行具有相同的idProducto,则未定义哪一行将被排序";第一个";(但是,可以保证它们不会得到相同的行号(-在这种情况下,您可能希望向order by子句添加一个或多个列,这样您就可以得到可预测的、稳定的结果。

最新更新