我有以下运行良好的 SQL 查询
UPDATE tnTOPIC A1
INNER JOIN (SELECT
fnTOPIC_IDX fnIDX,
COUNT(1) fnCOUNT
FROM tnURL
WHERE fnGOTIMAGE = 0
GROUP BY fnTOPIC_IDX) A2
ON (A1.fnIDX = A2.fnIDX
)
SET A1.fnRECORDS_REMAINING = A2.fnCOUNT
我想用输出的顺序更新 tnTOPIC (fnROW_NUMBER) 中的一个附加字段。
所以记录一为 1,记录二为 2,依此类推。
我使用 MariaDB。
提前致谢。
答案 0 :(得分:1)
您可以在加入表的子查询中使用 ROW_NUMBER()
窗口函数:
UPDATE tnTOPIC t
INNER JOIN (
SELECT t.fnIDX, u.fnCOUNT,
ROW_NUMBER() OVER (ORDER BY t.fnIDX) rn
FROM tnTOPIC t
INNER JOIN (
SELECT fnTOPIC_IDX fnIDX, COUNT(1) fnCOUNT
FROM tnURL
WHERE fnGOTIMAGE = 0
GROUP BY fnTOPIC_IDX
) u ON u.fnIDX = t.fnIDX
) s ON s.fnIDX = t.fnIDX
SET t.fnRECORDS_REMAINING = s.fnCOUNT,
t.fnROW_NUMBER = s.rn
如果您确定子查询的所有 fnTOPIC_IDX
将匹配 fnIDX
的 tnTOPIC
,您可以将代码简化为:
UPDATE tnTOPIC t
INNER JOIN (
SELECT fnTOPIC_IDX fnIDX, COUNT(1) fnCOUNT,
ROW_NUMBER() OVER (ORDER BY fnTOPIC_IDX) rn
FROM tnURL
WHERE fnGOTIMAGE = 0
GROUP BY fnTOPIC_IDX
) u ON u.fnIDX = t.fnIDX
SET t.fnRECORDS_REMAINING = u.fnCOUNT,
t.fnROW_NUMBER = u.rn
我在 fnIDX
的 ORDER BY
子句中使用了 ROW_NUMBER()
。
如果您想要序列的另一个顺序,您可以更改它。