Mysql:"SET @Variable = 0" 在一次查询中 [Java]
Mysql: "SET @Variable = 0" in one query [Java]
我有两个 sql 查询。但是在 Java 中我不能设置变量。
我试图将它概括为一个查询。但这不起作用,因为 sql 语法错误。
SET @rn = 0;
SELECT *
FROM (SELECT t.id, @rn := @rn + 1 AS rank
FROM stats t
ORDER BY t.points DESC) t2
WHERE t2.id = ?;
如果只有SET部分是你可以做的问题
SELECT t.id, @rn := @rn + 1 AS rank
FROM stats t
CROSS JOIN ( SELECT @rn := 0 ) as parameters
ORDER BY t.points DESC
您需要像这样进行连接:
SELECT stats.id, @rn := @rn+1 AS rank
FROM stats, (SELECT @rn:=0) a
WHERE stats.id = ?
如果你有 mysql 8.0,你可以使用: ROW_NUMBER() or RANK() :
SELECT
id,
ROW_NUMBER() OVER w AS 'row_number',
RANK() OVER w AS 'rank',
FROM stats
WHERE stats.id = ?
WINDOW w AS (ORDER BY points);
我有两个 sql 查询。但是在 Java 中我不能设置变量。
我试图将它概括为一个查询。但这不起作用,因为 sql 语法错误。
SET @rn = 0;
SELECT *
FROM (SELECT t.id, @rn := @rn + 1 AS rank
FROM stats t
ORDER BY t.points DESC) t2
WHERE t2.id = ?;
如果只有SET部分是你可以做的问题
SELECT t.id, @rn := @rn + 1 AS rank
FROM stats t
CROSS JOIN ( SELECT @rn := 0 ) as parameters
ORDER BY t.points DESC
您需要像这样进行连接:
SELECT stats.id, @rn := @rn+1 AS rank
FROM stats, (SELECT @rn:=0) a
WHERE stats.id = ?
如果你有 mysql 8.0,你可以使用: ROW_NUMBER() or RANK() :
SELECT
id,
ROW_NUMBER() OVER w AS 'row_number',
RANK() OVER w AS 'rank',
FROM stats
WHERE stats.id = ?
WINDOW w AS (ORDER BY points);