【问题标题】:select limit in sql在sql中选择限制
【发布时间】:2020-05-24 08:32:28
【问题描述】:

我写了这个查询,但在第 15 行(限制子句)给了我一个错误。 我们有 3 个表,状态、电子邮件和接收者。

CREATE PROCEDURE `inbox`(IN `page_size` INT,IN `page_number` INT)
BEGIN
    set @curr = ( SELECT entered_accounts.username
                FROM entered_accounts
                WHERE entered_accounts.time = (SELECT Max(entered_accounts.time) FROM entered_accounts));
    SET @tmp = page_number-1;
    SET @offset = page_size * @tmp;

    SELECT email.subject, email.body, email.time, state.readed, state.deleted
    FROM email INNER JOIN reciever USING(email_id) 
                INNER JOIN state USING (email_id) 
    WHERE state.username=reciever.username AND LOWER(reciever.username)=LOWER(@curr) AND NOT reciever.username=email.username
    ORDER BY email.time DESC
    LIMIT @offset,page_size;
END

【问题讨论】:

    标签: sql stored-procedures sql-order-by sql-limit


    【解决方案1】:

    MySQL 不支持LIMIT 子句中的用户变量。相反,您可以使用常规变量:

    DELIMITER //
    
    CREATE PROCEDURE `inbox`(IN `page_size` INT,IN `page_number` INT)
    BEGIN
        DECLARE v_offset INT;
        SET @curr = ( SELECT entered_accounts.username
                    FROM entered_accounts
                    WHERE entered_accounts.time = (SELECT Max(entered_accounts.time) FROM entered_accounts));
        SET @tmp = page_number-1;
        SET v_offset = page_size * @tmp;
    
        SELECT email.subject, email.body, email.time, state.readed, state.deleted
        FROM email INNER JOIN reciever USING(email_id) 
                    INNER JOIN state USING (email_id) 
        WHERE state.username=reciever.username AND LOWER(reciever.username)=LOWER(@curr) AND NOT reciever.username=email.username
        ORDER BY email.time DESC
        LIMIT v_offset, page_size;
    END//
    

    【讨论】:

      猜你喜欢
      • 2014-04-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-23
      • 2014-03-28
      • 1970-01-01
      • 1970-01-01
      • 2012-03-22
      • 1970-01-01
      相关资源
      最近更新 更多