sql >> Database teknologi >  >> RDS >> Mysql

MySQL LIMIT-klausul svarer til SQL SERVER

I SQL Server 2012 er der understøttelse af ANSI-standarden OFFSET / FETCH syntaks. Jeg bloggede om dette og her er det officielle dokument (dette er en udvidelse til ORDER BY ). Din syntaks konverteret til SQL Server 2012 ville være:

SELECT ID, Name, Price, Image 
  FROM Products 
  ORDER BY ID ASC 
  OFFSET (@start_from - 1) ROWS -- not sure if you need -1
    -- because I don't know how you calculated @start_from
  FETCH NEXT @items_on_page ROWS ONLY;

Før det skal du bruge forskellige løsninger, herunder ROW_NUMBER() metode. Se denne artikel og opfølgende diskussion . Hvis du ikke er på SQL Server 2012, kan du ikke bruge standardsyntaks eller MySQL's ikke-standardiserede LIMIT men du kan bruge en mere udførlig løsning såsom:

;WITH o AS
(
    SELECT TOP ((@start_from - 1) + @items_on_page)
         -- again, not sure if you need -1 because I 
         -- don't know how you calculated @start_from
      RowNum = ROW_NUMBER() OVER (ORDER BY ID ASC)
      /* , other columns */
    FROM Products
)
SELECT 
    RowNum
    /* , other columns */
FROM
    o
WHERE
    RowNum >= @start_from
ORDER BY
    RowNum;

Der er mange andre måder at flå denne kat på, det er usandsynligt, at det er den mest effektive, men syntaksmæssigt er det nok det enkleste. Jeg foreslår, at du gennemgår de links, jeg postede, samt de duplikerede forslag, der er noteret i kommentarerne til spørgsmålet.



  1. Adgang til eksterne XML-filer som variabler i et PSQL-script (hentet fra et bash-script)

  2. Komprimer en specifik partition i en tabel i SQL Server (T-SQL)

  3. Oracle Security Alert for CVE-2021-44228

  4. The Performance Tuning Maze