在sql中选择限制

enxuqcxy  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(428)

我写了这个查询,但是在第15行(limit子句)给了我一个错误。我们有3张table,州,电子邮件和收件人。

  1. CREATE PROCEDURE `inbox`(IN `page_size` INT,IN `page_number` INT)
  2. BEGIN
  3. set @curr = ( SELECT entered_accounts.username
  4. FROM entered_accounts
  5. WHERE entered_accounts.time = (SELECT Max(entered_accounts.time) FROM entered_accounts));
  6. SET @tmp = page_number-1;
  7. SET @offset = page_size * @tmp;
  8. SELECT email.subject, email.body, email.time, state.readed, state.deleted
  9. FROM email INNER JOIN reciever USING(email_id)
  10. INNER JOIN state USING (email_id)
  11. WHERE state.username=reciever.username AND LOWER(reciever.username)=LOWER(@curr) AND NOT reciever.username=email.username
  12. ORDER BY email.time DESC
  13. LIMIT @offset,page_size;
  14. END
x9ybnkn6

x9ybnkn61#

mysql不支持中的用户变量 LIMIT 条款。相反,可以使用正则变量:

  1. DELIMITER //
  2. CREATE PROCEDURE `inbox`(IN `page_size` INT,IN `page_number` INT)
  3. BEGIN
  4. DECLARE v_offset INT;
  5. SET @curr = ( SELECT entered_accounts.username
  6. FROM entered_accounts
  7. WHERE entered_accounts.time = (SELECT Max(entered_accounts.time) FROM entered_accounts));
  8. SET @tmp = page_number-1;
  9. SET v_offset = page_size * @tmp;
  10. SELECT email.subject, email.body, email.time, state.readed, state.deleted
  11. FROM email INNER JOIN reciever USING(email_id)
  12. INNER JOIN state USING (email_id)
  13. WHERE state.username=reciever.username AND LOWER(reciever.username)=LOWER(@curr) AND NOT reciever.username=email.username
  14. ORDER BY email.time DESC
  15. LIMIT v_offset, page_size;
  16. END//
展开查看全部

相关问题