Mysql:一个查询中的“SET @Variable = 0”[Java]

Posted

技术标签:

【中文标题】Mysql:一个查询中的“SET @Variable = 0”[Java]【英文标题】:Mysql: "SET @Variable = 0" in one query [Java] 【发布时间】:2019-06-18 08:27:30 【问题描述】:

我有两个 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 = ?;

【问题讨论】:

您是批量发送报表还是拆分单个报表?如果是后者,您使用的 Java 库是否允许在一个查询中发送多个语句?究竟是什么让您认为 Java 不允许使用函数或 SQL 语法错误?文件是这样说的吗?是因为您收到错误消息吗? 【参考方案1】:

你需要像这样加入:

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);

【讨论】:

【参考方案2】:

如果只有 SET 部分是你可以做的问题

SELECT t.id, @rn := @rn + 1 AS rank 
FROM stats t 
CROSS JOIN ( SELECT @rn := 0 ) as parameters
ORDER BY t.points DESC

您也可以查看本教程http://www.mysqltutorial.org/mysql-row_number/

【讨论】:

以上是关于Mysql:一个查询中的“SET @Variable = 0”[Java]的主要内容,如果未能解决你的问题,请参考以下文章

PHP wordpress 中的一次查询中的双重 MySQL 查询

DataReader 循环查询中的 C# MySQL 查询

mysql慢查询中的Codeigniter会话查询

用mysql查询出字段中的前几个字

MySQL笔记--MySQL基础查询

Mysql:一个查询中的“SET @Variable = 0”[Java]