【问题标题】:How can I change the oracle sql to mysql?如何将oracle sql更改为mysql?
【发布时间】:2020-11-03 09:08:03
【问题描述】:

以下Oracle SQL是

SELECT * FROM (
    SELECT ROWNUM AS rn, A.* FROM (
    SELECT ROWNUM, bno, title, content, b.regdate, viewcnt, user_name as userName
    FROM tbl_board b, tbl_member m
    ORDER BY bno DESC, b.regdate DESC) A)
WHERE rn BETWEEN '1' AND '10';

我想将此 SQL 更改为 MySQL。我怎样才能做到这一点? (我尝试分页系统)

【问题讨论】:

  • 请将您尝试和研究的内容添加到您的帖子中。另外,请看一下:how to ask?。谢谢!
  • 你使用的是 mysql 8 吗?
  • 是的!我正在使用 mysql8
  • 你用的是什么版本的Mysql?

标签: mysql sql oracle


【解决方案1】:

为什么不直接使用limit

SELECT bno, title, content, b.regdate, viewcnt, user_name as userName
FROM tbl_board b CROSS JOIN
     tbl_member m
ORDER BY bno DESC, b.regdate DESC
LIMIT 10;

对于分页,您可以添加 OFFSET 修饰符。例如:

LIMIT 10 OFFSET 10

如果你真的需要行号,那么你可以使用ROW_NUMBER():

SELECT ROW_NUMBER() OVER (ORDER BY bno, b.regdate) as rn
       bno, title, content, b.regdate, viewcnt, user_name as userName
FROM tbl_board b CROSS JOIN
     tbl_member m
ORDER BY bno DESC, b.regdate DESC
LIMIT 10;

【讨论】:

    【解决方案2】:

    在 MySQL 中没有与 ROWNUM 直接类似的东西。 (更新:感谢@Strawberry,Mysql 8 有 ROW_NUMBER() 函数) 但是你可以通过variables 来模拟它,比如:

    SELECT t.*, 
           @rownum := @rownum + 1 AS rank
      FROM yourtable t, 
           (SELECT @rownum := 0) r
    

    在您的情况下,您应该为每个级别的子查询应用两个变量。

    【讨论】:

    • @Strawberry 谢谢。因此,似乎 v8 具有所需的功能。对于使用旧 MySQL 版本的访问者,我将按原样保留我的答案。
    • 请注意,您的模拟需要 ORDER BY 子句
    【解决方案3】:

    试试这个,

    SELECT top 10 m.ROWNUM, m.bno, m.title, m.content, b.regdate, m.viewcnt,        m.user_name
    FROM tbl_board b, tbl_member m
    ORDER BY m.bno DESC, b.regdate DESC;
    

    【讨论】:

      猜你喜欢
      • 2023-04-09
      • 2018-08-05
      • 2016-05-03
      • 1970-01-01
      • 1970-01-01
      • 2021-04-14
      • 2010-11-26
      相关资源
      最近更新 更多