【问题标题】:Select where row number = rownum选择其中行号 = rownum
【发布时间】:2019-02-12 18:25:48
【问题描述】:

我一直在尝试运行此查询以按行号选择一行,但我在 where 子句中不断收到未知列“行”。这个查询可以吗

SELECT @row := @row + 1 AS row, pi.*
FROM ci_patient_info pi
where row = 2

【问题讨论】:

  • 在哪里将@row 初始化为零?如果不指定 ORDER BY,对结果集进行编号有什么意义?

标签: mysql


【解决方案1】:

subquery包装它

SELECT c.*
FROM
   (
      SELECT @row := @row + 1 AS row, pi.*
      FROM ci_patient_info pi
   ) c
where c.row = 2

更新 1

也许你的子查询应该是这样的,

  SELECT @row := @row + 1 AS row, pi.*
  FROM ci_patient_info pi, (SELECT @row:=0) x

【讨论】:

  • 这个查询给了我一个空的结果集
  • @RaymondFeliciano,这可能是因为您没有显式初始化 @row,所以它保留了上次运行的最大值(大于 2)。
  • 如果不是子查询,您的查询是否返回正确的结果?
【解决方案2】:

如果您需要第二条记录,只需使用LIMIT 子句即可。

SELECT  pi.*
FROM ci_patient_info pi LIMIT 1, 1

【讨论】:

  • 原来这是我查询数据库的方式。这样做的问题是,如果我选择第 35 行并使用 select @row 语句,因为我只有第 35 行结果集将有一条记录,因此行号不会是 35 而是 1。有没有办法获得相应的行该记录的编号
猜你喜欢
  • 1970-01-01
  • 2014-04-09
  • 2012-03-03
  • 1970-01-01
  • 2011-09-28
  • 1970-01-01
  • 1970-01-01
  • 2011-04-29
  • 1970-01-01
相关资源
最近更新 更多